前言.为什么要升级到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. CentOs7 +Jexus 5.8.2部署Asp.Net Core WebApi 1.0生产环境

    Jexus 是一款运行于 Linux 平台,以支持  ASP.NET.PHP 为特色的集高安全性和高性能为一体的 WEB 服务器和反向代理服务器.最新版 5.8.2 已经发布,有如下更新: 1,现在大 ...

  2. 【腾讯Bugly干货分享】微信iOS SQLite源码优化实践

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57b58022433221be01499480 作者:张三华 前言 随着微信iO ...

  3. Lesson 22 A glass envolops

    Text My daughter, Jane, never dreamed of receiving a letter from a girl of her own age in Holland. L ...

  4. ucos实时操作系统学习笔记——操作系统在STM32的移植

    使用ucos实时操作系统是在上学的时候,导师科研项目中.那时候就是网上找到操作系统移植教程以及应用教程依葫芦画瓢,功能实现也就罢了,没有很深入的去研究过这个东西.后来工作了,闲来无聊就研究了一下这个只 ...

  5. Entity Framework 6 Recipes 2nd Edition(10-4)译 -> 从存储过程返回一个复杂类型

    10-4. 从存储过程返回一个复杂类型 问题 想在方法中使用一个返回复杂类型的存储过程 解决方案 假设我们已经有如Figure 10-3.所示的模型,该Employee (雇员)模型包含Employe ...

  6. postman使用

    1.postman的下载:google首页左上角应用,点击后,如果没有下载postman,就在google商店搜索,点击右边按钮 2.下载后重新打开google首页,点击应用,可以看到已经下载过了,点 ...

  7. Owin:“System.Reflection.TargetInvocationException”类型的未经处理的异常在 mscorlib.dll 中发生

    异常汇总:http://www.cnblogs.com/dunitian/p/4523006.html#signalR 这个异常我遇到两种情况,供园友参考: 第一种,权限不够,在项目运行的时候弹出== ...

  8. .Net使用Redis详解之ServiceStack.Redis(七)

    序言 本篇从.Net如何接入Reis开始,直至.Net对Redis的各种操作,为了方便学习与做为文档的查看,我做一遍注释展现,其中会对list的阻塞功能和事务的运用做二个案例,进行记录学习. Redi ...

  9. 【Win 10 应用开发】InkToolBar——涂鸦如此简单

    从WPF开始,就有个InkCanvas控件,封装了数字墨迹处理相关的功能,Silverlight到Win 8 App,再到UWP应用,都有这个控件,所以,老周说了3688遍,凡是.net基础扎实者,必 ...

  10. PostCSS深入学习: PostCSS和Sass、Stylus或LESS一起使用

    如果你喜欢使用PostCSS,但又不想抛弃你最喜欢的预处理器.不用担心,你不需要作出二选一的选择,你可以把PostCSS和预处理器(Sass.Stylus或LESS)结合起来使用. 有几个PostCS ...