美文网首页
GreenDao 3.2 入门配置以及简单使用

GreenDao 3.2 入门配置以及简单使用

作者: EraJieZhang | 来源:发表于2018-11-17 21:26 被阅读0次

    相关资料

    GreenDao 官网:http://greenrobot.org/greendao/
    GreenDao 特征介绍:http://greenrobot.org/greendao/features/
    GreenDao 学习文档:http://greenrobot.org/greendao/documentation/
    GreenDao 更新日志:http://greenrobot.org/greendao/changelog/
    GreenDao GitHub地址:https://github.com/greenrobot/greenDAO

    GreenDao优点:

    1.性能高,号称Android最快的关系型数据库,存取速度快
    2.内存占用小
    3.库文件比较小,小于100K,编译时间低,而且可以避免65K方法限制
    4.支持数据库加密 greendao支持SQLCipher进行数据库加密
    5.激活实体,支持缓存,代码自动生成。

    1.在build中添加配置如下:

    projet 目录下的build.gradle

            dependencies{
                classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'
            }   
    

    2.moudle 下的build.gradle添加如下内容:

    第一行添加插件:

        apply plugin: 'org.greenrobot.greendao'
    

    3.添加依赖

    dependencies {
    .......
    implementation 'org.greenrobot:greendao:3.2.0' // add library
    implementation 'org.greenrobot:greendao-generator:3.2.0'
    }
    

    //添加好后sync一下工程

    4.根目录下添加

    //配置数据库,配置版本号即可,其他的只需要保持默认
        greendao {
            //数据库版本号
            schemaVersion 1
            //数据库所在包
            daoPackage 'cn.dapchina.manager.rxjava.db'
            //生成的数据库文件的目录
            targetGenDir 'src/main/java'
            //自动生成单元测试
        //    generateTests true
            //生成的单元测试目录
        //    targetGenDirTests
        }
    

    5.新建实体类

    @Entity
    public class Student {
        @Id
        private Long id;
        private String name;
        private int age;
        private String num;
    }
    

    6.然后点击 android studio 的 build-->make project

    7.新建DbManager 类

    /**
     * @author EraJieZhang
     * @data 2018年11月17日
     * 数据库工具类
     */
    public class DbManager {
    
        // 是否加密
        public static final boolean ENCRYPTED = true;
       //数据库名称
        private static final String DB_NAME = "test.db";
        private static DbManager mDbManager;
        private static DaoMaster.DevOpenHelper mDevOpenHelper;
        private static DaoMaster mDaoMaster;
        private static DaoSession mDaoSession;
    
        private Context mContext;
    
        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;
        }
    }
    
    

    8.根据StudentDaoOpe修改自己需要的增删改查语句

    /**
     * @author EraJieZhang
     * @data 2018年11月17日
     * 学生表工具类
     */
    public class StudentDaoOpe {
    
    
        /**
         * 将数据实体通过事务添加至数据库
         *
         * @param context
         * @param list
         */
        public static void insertData(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 删除具体内容(根据bean删除数据)
         */
        public static void deleteData(Context context, Student student) {
            DbManager.getDaoSession(context).getStudentDao().delete(student);
        }
        /**
         * 根据id删除数据至数据库
         *
         * @param context
         * @param id      删除具体内容的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 w    删除的条件封装{WhereCondition w = StudentDao.Properties.Name.like("EraJieZhnang");}
         */
        public static void deleteDataName(Context context,WhereCondition w) {
            DbManager.getDaoSession(context).getStudentDao().queryBuilder().where(w).
                    buildDelete().
                    executeDeleteWithoutDetachingEntities();
        }
        /**
         * 更新数据库
         *
         * @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();
        }
    
        /**
         查询指定数据
         @param context
         @param where   whera条件{@"where _id = ?"}
         @param selectionArg    条件里“?”对应的参数 arraylist就行
         @return
         */
        public static List<Student> queryAppoint(Context context,String where,Collection<Object> selectionArg) {
    
            Query<Student> builder =  DbManager.getDaoSession(context).getStudentDao().
                    queryRawCreateListArgs(where,selectionArg);
    
            return builder.list();
        }
    
    
    
        /**
         *  分页加载
         * @param context
         * @param pageSize 当前第几页(程序中动态修改pageSize的值即可)
         * @param pageNum  每页显示多少个
         * @return
         */
        public static List<Student> queryPaging( int pageSize, int pageNum,Context context){
            StudentDao studentDao = DbManager.getDaoSession(context).getStudentDao();
            List<Student> listMsg = studentDao.queryBuilder()
                    .offset(pageSize * pageNum).limit(pageNum).list();
            return listMsg;
        }
    }
    
    

    相关文章

      网友评论

          本文标题:GreenDao 3.2 入门配置以及简单使用

          本文链接:https://www.haomeiwen.com/subject/mqgifqtx.html