GreenDao3.0的使用

Posted 巫山老妖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GreenDao3.0的使用相关的知识,希望对你有一定的参考价值。

使用:

1、在build.gradle中添加

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        google()
        jcenter()
        mavenCentral() // add repository GreenDao
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.1.3"
        classpath \'org.greenrobot:greendao-gradle-plugin:3.3.0\' // add plugin  GreenDao

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

2、在app包的build.gradle中

plugins {
    id \'com.android.application\'
    id \'org.greenrobot.greendao\' // apply plugin
}

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.3"

    defaultConfig {
        applicationId "com.example.mygreendao"
        minSdkVersion 16
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile(\'proguard-android-optimize.txt\'), \'proguard-rules.pro\'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    greendao {
        //数据库的schema版本,也可以理解为数据库版本号
        schemaVersion 1
        //设置DaoMaster、DaoSession、Dao包名,也就是要放置这些类的包的全路径。
        daoPackage \'com.example.mygreendao.greendao\'
        //设置DaoMaster、DaoSession、Dao目录
        targetGenDir \'src/main/java\'
    }

}

dependencies {

    implementation \'androidx.appcompat:appcompat:1.1.0\'
    implementation \'com.google.android.material:material:1.1.0\'
    implementation \'androidx.constraintlayout:constraintlayout:1.1.3\'
    testImplementation \'junit:junit:4.+\'
    androidTestImplementation \'androidx.test.ext:junit:1.1.1\'
    androidTestImplementation \'androidx.test.espresso:espresso-core:3.2.0\'

    //GreenDao
    implementation \'org.greenrobot:greendao:3.3.0\' // add library
}

  项目内容如下图:

 

 3、创建Student实体类

package com.example.mygreendao.bean;

import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Generated;

@Entity
public class Student {
    @Id(autoincrement = true)//自增ID
    private Long id;
    private String name;
    private int age;
    //有参构造
    @Generated(hash = 352757281)
    public Student(Long id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
    //无参构造
    @Generated(hash = 1556870573)
    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Long getId() {
        return this.id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return this.age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

 4、修复一下工程,自动生成greendao包下的类(就是点击一下小锤子),你会自动生成上图中greendao包中的类。

    5、开始使用,创建管理类

package com.example.mygreendao.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;

import com.example.mygreendao.greendao.DaoMaster;
import com.example.mygreendao.greendao.DaoSession;

public class DbManager {
    //数据库名称
    private static final String DB_NAME = "test.db";
    private Context mContext;//上下文
    private static DbManager mDbManager;
    private static DaoMaster.DevOpenHelper mDevOpenHelper;
    private static DaoMaster mDaoMaster;
    private static DaoSession mDaoSession;

    private DbManager(Context context){
        this.mContext = context;
        // 初始化数据库信息
        mDevOpenHelper = new DaoMaster.DevOpenHelper(context,DB_NAME);
        getDaoMaster(context);
        getDaoSession(context);
    }

    public static DbManager getInstance(Context context){
        if (null == mDbManager){
            synchronized (DbManager.class){
                if (null == mDbManager){
                    mDbManager = new DbManager(context);
                }
            }
        }
        return mDbManager;
    }

    /**
     * 获取可读数据库
     * @param context
     * @return
     */
    public static SQLiteDatabase getReadableDatabase(Context context){
        if (null == mDevOpenHelper){
            getInstance(context);
        }
        return mDevOpenHelper.getReadableDatabase();
    }
    /**
     * 获取可写数据库
     * @param context
     * @return
     */
    public static SQLiteDatabase getWritableDatabase(Context context) {
        if (null == mDevOpenHelper) {
            getInstance(context);
        }

        return mDevOpenHelper.getWritableDatabase();
    }

    /**
     * 获取DaoMaster
     * @param context
     * @return
     */
    public static DaoMaster getDaoMaster(Context context){
        if (null == mDaoMaster){
            synchronized (DbManager.class){
                if (null == mDaoMaster){
                    mDaoMaster = new DaoMaster(getWritableDatabase(context));
                }
            }
        }
        return mDaoMaster;
    }

    /**
     * 获取DaoSession
     * @param context
     * @return
     */
    public static DaoSession getDaoSession(Context context) {
        if (null == mDaoSession) {
            synchronized (DbManager.class) {
                mDaoSession = getDaoMaster(context).newSession();
            }
        }
        return mDaoSession;
    }

}

  6、增删改查

package com.example.mygreendao.db;

import android.content.Context;

import com.example.mygreendao.bean.Student;
import com.example.mygreendao.greendao.StudentDao;

import org.greenrobot.greendao.query.QueryBuilder;

import java.util.List;

public class StudentDaoOpen {

    /**
     * 添加数据至数据库
     * @param context
     * @param student
     */
    public static void insertData(Context context, Student student){
        DbManager.getDaoSession(context).getStudentDao().insert(student);
    }

    /**
     * 将数据实体通过事务添加至数据库
     * @param context
     * @param list
     */
    public static void inserData(Context context, List<Student> list){
        if (null == list || list.size() <= 0) {
            return;
        }
        DbManager.getDaoSession(context).getStudentDao().insertInTx(list);
    }
    /**
     * 添加数据至数据库,如果存在,将原来的数据覆盖
     * 内部代码判断了如果存在就update(entity);不存在就insert(entity);
     * @param context
     * @param student
     */
    public static void saveData(Context context, Student student) {
        DbManager.getDaoSession(context).getStudentDao().save(student);
    }

    /**
     * 删除数据至数据库
     * @param context
     * @param student 删除具体内容
     */
    public static void deleteData(Context context, Student student) {
        DbManager.getDaoSession(context).getStudentDao().delete(student);
    }

    /**
     * 根据id删除数据至数据库
     * @param context
     * @param id      删除具体内容
     */
    public static void deleteByKeyData(Context context, long id) {
        DbManager.getDaoSession(context).getStudentDao().deleteByKey(id);
    }

    /**
     * 删除全部数据
     * @param context
     */
    public static void deleteAllData(Context context) {
        DbManager.getDaoSession(context).getStudentDao().deleteAll();
    }

    /**
     * 更新数据库
     *
     * @param context
     * @param student
     */
    public static void updateData(Context context, Student student) {
        DbManager.getDaoSession(context).getStudentDao().update(student);
    }

    /**
     * 查询所有数据
     * @param context
     * @return
     */
    public static List<Student> queryAll(Context context) {
        QueryBuilder<Student> builder = DbManager.getDaoSession(context).getStudentDao().queryBuilder();

        return builder.build().list();
    }

    /**
     * 根据id,其他的字段类似
     * @param context
     * @param id
     * @return
     */
    public static List<Student> queryForId(Context context, long id) {
        QueryBuilder<Student> builder = DbManager.getDaoSession(context).getStudentDao().queryBuilder();
        /**
         * 返回当前id的数据集合,当然where(这里面可以有多组,做为条件);
         * 这里build.list();与where(StudentDao.Properties.Id.eq(id)).list()结果是一样的;
         * 在QueryBuilder类中list()方法return build().list();
         */
        // Query<Student> build = builder.where(StudentDao.Properties.Id.eq(id)).build();
        // List<Student> list = build.list();
        return builder.where(StudentDao.Properties.Id.eq(id)).list();
    }


}

  7、布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/add"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:text="增" />

    <Button
        android:id="@+id/delete"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:text="删" />

    <Button
        android:id="@+id/updata"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:text="改" />

    <Button
        android:id="@+id/check"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:text="查" />
    <Button
        android:id="@+id/deleteAll"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:text="删除全部" />

    <Button
        android:id="@+id/check_id"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:text="根据id查" />



</LinearLayout>

  8、调用

package com.example.mygreendao;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import com.example.mygreendao.bean.Student;
import com.example.mygreendao.db.StudentDaoOpen;

import java.util.List;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Context mContext;
    private Button add;
    private Button delete;
    private Button updata;
    private Button check;
    private Button deleteAll;
    private Button check_id;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mContext = this;

        add = findViewById(R.id.add);
        add.setOnClickListener(this);
        delete = findViewById(R.id.delete);
        delete.setOnClickListener(this);
        updata = findViewById(R.id.updata);
        updata.setOnClickListener(this);
        check = findViewById(R.id.check);
        check.setOnClickListener(this);
        deleteAll = findViewById(R.id.deleteAll);
        deleteAll.setOnClickListener(this);
        check_id = findViewById(R.id.check_id);
        check_id.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.add://添加
                Student student = new Student("张三",12);
                StudentDaoOpen.insertData(mContext,student);
                Student student2 = new Student("李四",16);
                StudentDaoOpen.insertData(mContext,student2);
                Student student20 = new Student("王五",18);
                StudentDaoOpen.insertData(mContext,student20);

                break;
            case R.id.delete://删除
                Student student3 = new Student((long)4,"张三",12);
                StudentDaoOpen.deleteData(mContext,student3);
                break;
            case R.id.updata://修改
                Student student4 = new Student((long) 5,"李四",20);
                StudentDaoOpen.updateData(mContext, student4);
                break;
            case R.id.check://查询
                List<Student> students = StudentDaoOpen.queryAll(mContext);
                for (int i = 0; i < students.size(); i++) {
                    Log.i("Log", "Id:"+students.get(i).getId()+" ,姓名:"+students.get(i).getName()+" ,年龄:"+students.get(i).getAge());
                }

                break;
            case R.id.deleteAll://删除全部
                StudentDaoOpen.deleteAllData(mContext);
                break;
            case R.id.check_id://根据ID查询
                List<Student> students1 = StudentDaoOpen.queryForId(mContext, 6);
                for (int i = 0; i < students1.size(); i++) {
                    Log.i("Log", "Id:"+students1.get(i).getId()+" ,姓名:"+students1.get(i).getName()+" ,年龄:"+students1.get(i).getAge());
                }

                break;
        }

    }
}

 结束

 

参考于:

https://blog.csdn.net/huangxiaoguo1/article/details/52916189

https://blog.csdn.net/bskfnvjtlyzmv867/article/details/71250101

以上是关于GreenDao3.0的使用的主要内容,如果未能解决你的问题,请参考以下文章

GreenDao3.0的使用

Android笔记之greenDao3.0学习总结

Android Studio 简单使用 GreenDao3.0

GreenDao3.0使用详解

GreenDao3.0使用详解

Android GreenDAO3.0——entity建模