• GreenDao2.2升级GreenDao3.0的适配之路


    前言.为什么要升级到Greendao3.0?

    1. 多人开发

    以往的数据库建表建Dao等操作要新开一个module,在统一的地方管理数据库建表,现在可以直接写Entity。多人开发时自己管自己的Entity即可 不用像以前冲突成狗。

    2. 结构简洁方便

    以往是在写CreateTable addEntity("")等方法建表,现在只需要在Entity里使用3.0的注解语法

    3. 注解使用

    以前的Entity是会经常生成和覆盖的,所以不建议改Entity的代码,所以就不好在Entity里面加注解了,这也使得放弃gson的@SerializedName("id") 这个返回字段与自写字段不同时的注解。3.0以后Greendao自己都用注解了那我们也就可以用了。

    4. 数据库安全

     数据库加密 3.0的GreenDao提供了自带加密的功能非常实用。

    升级之路

    官网说这里升级有两条路可走,一条是保留之前生成代码的那个模块,另一条是迁移实体类并且删除之前的其他生成文件。这里推荐第二种做法,第一种总感觉升级的不彻底会留坑。

    1.将之前的Entity保留好

    这里可以选择迁移一下文件夹里的Entity,并且直接将之前的生成配置给去掉。

    settings.gradle里面的include去掉之前的module, 主build.gradle里的preBuild.dependsOn那个模块也去掉。

    2.升级gradle

    在build.gradle的dependence里面升级版本号,改成如下

    compile 'org.greenrobot:greendao-generator:3.0.0'
    compile 'org.greenrobot:greendao:3.0.1'  

    3.改配置的地址

    因为把之前用来生成的Module弃用了,所以要把一些之前在就Module配置的东西补到工程的build.gradle里面。

    在顶部加上

    apply plugin: 'org.greenrobot.greendao'

    在dependencies{}下面加上

    greendao {
        targetGenDir 'src/main/java'  //生成代码放的路径
        daoPackage 'com.XXX.platform.dao'
    }

    4.删除派生部分,加上注解,主键,依赖,entity

    将之前代码里的派生代码删除,比如getter setter方法,还有一些注释包裹着的代码/*ToOne*/  类似于下面都能删了。

        /** To-one relationship, resolved on first access. */
        public OrderBase getOrderBase() {
            Long __key = this.orderId;
            if (orderBase__resolvedKey == null || !orderBase__resolvedKey.equals(__key)) {
                if (daoSession == null) {
                    throw new DaoException("Entity is detached from DAO context");
                }
                OrderBaseDao targetDao = daoSession.getOrderBaseDao();
                OrderBase orderBaseNew = targetDao.load(__key);
                synchronized (this) {
                    orderBase = orderBaseNew;
                	orderBase__resolvedKey = __key;
                }
            }
            return orderBase;

    将之前被这个注释包裹的属性删掉,并在前面加上@Transient

    // KEEP INCLUDES - put your custom includes here
    // 属性代码
    // KEEP INCLUDES END
       
    // KEEP FIELDS - put your custom fields here
    // 属性getter setter方法
    // KEEP FIELDS END
    

    下面的getset方法可以保留,也可删了让他重新生成。 但这里要说一下加了@Transient注解的属性 不会自动生成getset方法,所以你可以先run一次待他生成后再加上@Transient注解。

    接下来就是把之前创建表的旧代码的一些特殊写法,改成新版本的注解写法。

    在这段过程中可能会经常改一点Run一下,这时可以先不考虑工程里的各种红线,因为build的时候会先生成这些Dao,然后再编译业务的代码。所以当你看到下面的报错已经和greendao无关时就说明这边已经通过了。如果是greendao的生成报错也不用担心,这些错误的描述都是精确位置和非常易懂的。

    列出几种错误:

    Error:Execution failed for task ':platform:greendao'.
    > Currently only single FK columns are supported: ToOne 'orderBase' from OrderXXX to OrderBase
    

    上面没有添加主键

    Error:Execution failed for task ':platform:greendao'.
    > Can't replace field in /Users/dsx/Documents/XXX/platform/src/main/java/com/XXX/platform/bean/OrderXXX.java:43 with generated version.//董铂然 博客园
                          If you would like to keep it, it should be explicitly marked with @Keep annotation.
                          Otherwise please mark it with @Generated annotation

    上面需要加上@keep

    Error:Execution failed for task ':platform:greendao'.
    > Can't add field `Variable(type=VariableType(name=com.xxx.platform.dao.OrderBase, isPrimitive=false, originalName=OrderBase, typeArguments=null), name=orderBase)` // 董尚先
    for entity OrderXXX due to: Unsupported type com.xxx.platform.dao.OrderBase

    上面需要设置好表关系。 应该是漏了ToOne或ToMany

    5.前后语法对比

    一般在干这种升级操作之前应该都是对3.0语法有了解的了,如果不熟可以看下这篇文章的注解部分。就是之前2.2的某某某代码应该改为3.0的某某某注解

    http://www.cnblogs.com/dsxniubility/p/5699543.html

     

    6.把包名文件替换

    全文搜索把包名替换成下面的

    // old package name
    import de.greenrobot.dao.database.Database;
    ...
     
    // new package name
    import org.greenrobot.greendao.database.Database;
    ...
    

    7.最后解决一些编译错误

    1.DaoOpenHelper改成DevOpenHelper

    2.sqldatabase 换成database

    3.getWritableDatabase()换成getWritableDb()

    至此完成

  • 相关阅读:
    前端请求跨域理解
    可视化交互行为
    文章标题
    在map上标记point
    基于force布局的map
    stack布局
    python一些特有语法
    histogram布局用法
    patition布局
    Shell命令行处理JSON
  • 原文地址:https://www.cnblogs.com/dsxniubility/p/5699629.html
Copyright © 2020-2023  润新知