• 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

  • 相关阅读:
    Compiler Warning C4150: deletion of pointer to incomplete type 'XXX'; no destructor called
    What happend: Exception throws in the .ctor()?
    FocusScope学习一: Logic Focus与Keyboard Focus
    线性筛prime,强大O(n)
    网络流24题方格取数
    splay(1区间翻转区间最值与区间修改)
    排列组合容斥原理
    错排思路
    splay2(区间修改+内存回收)
    DP_1d1d诗人小G
  • 原文地址:https://www.cnblogs.com/changyiqiang/p/14774763.html
Copyright © 2020-2023  润新知