美文网首页
数据库GreenDAO的理解和使用

数据库GreenDAO的理解和使用

作者: 特大碗牛肉面 | 来源:发表于2017-12-22 17:45 被阅读0次

    Android第三方开源数据库: GreenADO,GreenADO对Android原生SQLite进行了封装,比较好用,对内存占用小,库文件比较小,官方说是小于100K,编译时间低,同时也支持了加密和缓存等;
    GreenDAO官方地址: http://greenrobot.org/greendao/
    GreenDAOgithub地址: https://github.com/greenrobot/greenDAO
    GreenDAO使用方法如下:
    1、去github下粘贴依赖:

    buildscript {
        repositories {
            jcenter()
            mavenCentral() // add repository
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:2.3.3'
            classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
        }
    }
     
    // In your app projects build.gradle file:
    apply plugin: 'com.android.application'
    apply plugin: 'org.greenrobot.greendao' // apply plugin
     
    dependencies {
        compile 'org.greenrobot:greendao:3.2.2' // add library
    } 
    

    2、在你app下的build.gradle下配置数据库信息:

    greendao {
        schemaVersion 1
        daoPackage 'com.anye.greendao.gen'
        targetGenDir 'src/main/java'
    }
    

    其中 schemaVersion是数据库版本,daoPackage 'com.anye.greendao.gen' 是设置DaoMaster 、DaoSession、Dao包名; targetGenDir 'src/main/java' 是设置DaoMaster 、DaoSession、Dao所在目录

    3、接下来编写你要用的实体类,例如写个类叫"Test":

    @Entity
    public class Test {
    
        @Id
        private Long id;
        private String name;
        private String type;
    
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getType() {
            return type;
        }
    
        public void setType(String type) {
            this.type = type;
        }
    }
    

    4、实体类写好后,构建一下你的项目,GreenDAO会自动帮你生成一些帮助类DaoMaster 、DaoSession、Dao:


    所在的目录你可以通过配置库信息的时候改动

    5、基本的使用:

     mHelper = new DaoMaster.DevOpenHelper(this,"test-db",null);
            mDatabase = mHelper.getWritableDatabase();
            mDaoMaster = new DaoMaster(mDatabase);
            mDaoSession = mDaoMaster.newSession();
            mTestDao = mDaoSession.getTestDao();
    

    6、GreenDAO的相关方法:
    list(): 所有实体都将被加载到内存中;
    listLazy(): 实体懒加载到内存,必须close;(推荐使用)

    LazyList<test> testList= mTestDao.queryBuilder().listLazy();
    for (Test test : testList) {
            Log.d("TAG", "listLazy" + test );
                            }
    testList.close();
    

    listLazyUncached() :延迟加载不缓存数据, 每次访问结果集的时候都是从数据库中加载,而不使用缓存,必须close;
    listIterator() : 自己遍历数据, 可以通过迭代遍历按需加载的数据结果集(lazily)。数据没有缓存;一旦所有元素被访问或者遍历完成,来自于listLazy()的cached lazy和来自listIterator()的lazy iterator会自动关闭cursor必须手动close;
    orderAsc: 升序排序
    orderDesc: 降序排序
    eq():==
    noteq():!=
    gt(): >
    t():<
    ge:>=
    le:<=
    like():包含
    between:俩者之间
    in:在某个值内
    notIn:不在某个值内
    detachAll: 清除指定Dao类的缓存
    daoSession.clear(): 清除所所有的缓存;
    insert: 插入数据
    delete: 按对象删除
    deleteByKey: 按主键删除
    deleteInTx: 删除多条记录
    deleteAll(): 全部删除
    update: 修改一条记录;
    updateInTx: 修改多条记录
    queryRaw: 查询一条记录;
    QueryBuilder : 查询多条记录

    //多线程查询: forCurrentThread(直接放进你自己new的子线程会报错)

    final Query query = testDao.queryBuilder().build();
        new Thread(){
            @Override
            public void run() {
                List list = query.forCurrentThread().list();
            }
        }.start();
    

    //---------------------------------------------------------
    7.打开调试日志,查看GreenDAO的sql语句的拼装:
    初始化的时候加上:

    QueryBuilder.LOG_SQL = true;
    QueryBuilder.LOG_VALUES = true;
    

    8、GreenDAO注解:

    @Entity:  GreenDAO支持的实体;
    @NotNull 设置表中当前列的值不可为空
    @Generated  GreenDao运行所产生的构造函数或者方法,被此标注的代码可以变更或者下次运行时清除
    @Id      主键
    @Unique    唯一约束 
    @ToMany   一对多 
    @OrderBy   排序 
    @ToOne      一对一 
    @ToMany   一对多
    @Transient  不存储在数据库中 
    @JoinEntity  定义表连接关系
    @Unique  向数据库列添加了一个唯一的约束
    @Keep  注解的代码段在GreenDao下次运行时保持不变
             1.注解实体类:默认禁止修改此类
              2.注解其他代码段,默认禁止修改注解的代码段
    

    9、数据库升级:
    方案一 : 第三方库: https://github.com/yuweiguocn/GreenDaoUpgradeHelper
    重写DaoMaster 的 onUpgrade 方法,替换之前的javaben;
    方案二 : 加入帮助类 MigrationHelper.java,在DaoMaster的onUpgrade内调判断newVersion和oldVersion是否一样,不一样就调用这个帮助类中的方法:
    MigrationHelper.getInstance().migrate(db, CustomerDao.class);
    MigrationHelper帮助类的详情地址: https://stackoverflow.com/questions/13373170/greendao-schema-update-and-data-migration/30334668#30334668
    最后记得将版本号改一下:

    greendao {
        schemaVersion 2
        daoPackage 'com.anye.greendao.gen'
        targetGenDir 'src/main/java'
    }
    

    10、总结:
    参考 http://blog.csdn.net/io_field/article/details/52213972
    http://blog.sina.com.cn/s/blog_af5cfb030102w20v.html
    http://greenrobot.org/greendao/documentation/updating-to-greendao-3-and-annotations/
    http://blog.csdn.net/liuchao9876543210/article/details/54378859</test>

    相关文章

      网友评论

          本文标题:数据库GreenDAO的理解和使用

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