前言.为什么要升级到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()

至此完成

GreenDao2.2升级GreenDao3.0的适配之路的更多相关文章

  1. xcode7.3 升级 xcode8.0 后权限设置问题(升级xcode 8.0 后构建版本不显示问题)

    xcode7.3 升级 xcode8.0 后权限设置问题(升级xcode 8.0 后构建版本不显示问题) 前两天为了适配 iOS10 的系统 我将xcode 7.3 升级到了 xcode 8.0 但是 ...

  2. GreenDao3.0简单使用(转)

    关于GreenDao greenDao是一个将对象映射到SQLite数据库中的轻量且快速的ORM解决方案. 关于greenDAO的概念可以看官网greenDAO greenDAO 优势 1.一个精简的 ...

  3. gitlab RPM卸载 & 安装 && 升级(9.0.13-》9.5.9-》10.0->10.3.9->10.6.6-》10.8-》11.0)

    版本:9.0.3 升级版本:9.0.13 一,停止服务 gitlab-ctl stop unicorn gitlab-ctl stop sidekiq gitlab-ctl stop nginx 二, ...

  4. python3 升级 pip9.0.1 到pip-9.0.3

    首先试试 python -m pip install --upgrade pip python3.5 升级 pip-9.0.3报错 You are using pip version 9.0.1, h ...

  5. android greendao3.0 多表关联关系讲解(转)

    转自:http://www.jianshu.com/p/dbec25bd575f 前言 之前用过数据库框架:realm.kjdb,今天准备实践学习一下greendao 3.0.greendao 3.0 ...

  6. 【Unity】近期整理Unity4.x 项目升级Unity5.0 过程中出现的各种常见问题,与大家共享。

    近期整理Unity4.x 项目升级Unity5.0 过程中出现的各种常见问题,与大家共享. 1:Unity4.x 项目中3D模型其材质丢失,成为"白模"?       解决方式:手 ...

  7. Android Studio升级到0.8.1后怎样设置字体大小?

    升级到0.8.1后.打开设置字体大小页面.你会发现无论是Default还是Darcula,都不同意你改变字体的大小.事实上这个是由于这两个模式是Android Studio自带模式,所以不同意你修改, ...

  8. 升级xcode10.0, 终端运行 运行报错:Print: Entry, “:CFBundleIdentifier”, Does Not Exist

    目录 问题原因 解决方法 终端解决 Print: Entry, ":CFBundleIdentifier", Does Not Exist 第一步: 去官网GitHub下载对应包就 ...

  9. centos6.8 Mysql-5.7.20 升级 mysql-8.0.14-1

    Mysql-5.7.20 升级 mysql-8.0.14-1   操作前建议先查阅以下网页初步了解Mysql版本升级信息  https://blog.csdn.net/u012946310/artic ...

随机推荐

  1. Java版本:识别Json字符串并分隔成Map集合

    前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...

  2. 2000条你应知的WPF小姿势 基础篇<57-62 依赖属性进阶>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C# 和 2,00 ...

  3. Ambari服务依赖关系图生成脚本

    1. 生成服务依赖关系 #!/usr/bin/python import sys import commands import json def genDependString(ip): url=&q ...

  4. ABP源码分析二十三:Authorization

    Permission:用于定义一个Permission,一个permission可以包含多个子Permission. PermissionDictionary:继承自Dictionary<str ...

  5. 日向blog开发记录

    一点历史关于,Sonne Blog 2016.03.25springmvc + hibernate框架搭建.2016.04.21日向blog首页.2016.04.24分页实现.2016.04.30登录 ...

  6. 警告: [unchecked] 对作为原始类型IScheme的成员的write(TProt ocol,T)的调用未经过检查

    jdk 从8 改成了7 就好了! 或者, 修改源码, 每个响应的地方加上 surppressingWarnings xxx , 或者使用 请使用 -Xlint:unchecked 重新编译. 参照 h ...

  7. myeclipse 无法启动 java.lang.IllegalStateException: Unable to acquire application service. Ensure that the org.eclipse.core.runtime bundle is resolved and started (see config.ini).

    把myeclipse10 按照目录完整拷贝到了另外一台电脑, 另外的目录 原安装目录 D\:\soft\i\myeclipse10 新安装目录 E\:\soft\myeclipse10 双击启动失败, ...

  8. 【MSP是什么】MSP认证之成功的项目群管理

    同项目管理相比,项目群管理是为了实现项目群的战略目标与利益,而对一组项目进行的统一协调管理. 项目群管理 项目群管理是以项目管理为核心.单个项目上进行日常性的项目管理,项目群管理是对多个项目进行的总体 ...

  9. 设计模式(七): 通过转接头来观察"适配器模式"(Adapter Pattern)

    在前面一篇博客中介绍了“命令模式”(Command Pattern),今天博客的主题是“适配器模式”(Adapter Pattern).适配器模式用处还是比较多的,如果你对“适配器模式”理解呢,那么自 ...

  10. PHP继承

    继承是PHP5面象对象程序设计的重要特性之一,它是指建立一个新的派生类,从一个或多个先前定义的类中继承数据和函数,而且可以重新定义或加进新数据和 函数,从而建立了类的层次或等级. 继承性是子类自动共享 ...