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()
至此完成
GreenDao2.2升级GreenDao3.0的适配之路的更多相关文章
- xcode7.3 升级 xcode8.0 后权限设置问题(升级xcode 8.0 后构建版本不显示问题)
xcode7.3 升级 xcode8.0 后权限设置问题(升级xcode 8.0 后构建版本不显示问题) 前两天为了适配 iOS10 的系统 我将xcode 7.3 升级到了 xcode 8.0 但是 ...
- GreenDao3.0简单使用(转)
关于GreenDao greenDao是一个将对象映射到SQLite数据库中的轻量且快速的ORM解决方案. 关于greenDAO的概念可以看官网greenDAO greenDAO 优势 1.一个精简的 ...
- 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 二, ...
- 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 ...
- android greendao3.0 多表关联关系讲解(转)
转自:http://www.jianshu.com/p/dbec25bd575f 前言 之前用过数据库框架:realm.kjdb,今天准备实践学习一下greendao 3.0.greendao 3.0 ...
- 【Unity】近期整理Unity4.x 项目升级Unity5.0 过程中出现的各种常见问题,与大家共享。
近期整理Unity4.x 项目升级Unity5.0 过程中出现的各种常见问题,与大家共享. 1:Unity4.x 项目中3D模型其材质丢失,成为"白模"? 解决方式:手 ...
- Android Studio升级到0.8.1后怎样设置字体大小?
升级到0.8.1后.打开设置字体大小页面.你会发现无论是Default还是Darcula,都不同意你改变字体的大小.事实上这个是由于这两个模式是Android Studio自带模式,所以不同意你修改, ...
- 升级xcode10.0, 终端运行 运行报错:Print: Entry, “:CFBundleIdentifier”, Does Not Exist
目录 问题原因 解决方法 终端解决 Print: Entry, ":CFBundleIdentifier", Does Not Exist 第一步: 去官网GitHub下载对应包就 ...
- 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 ...
随机推荐
- CYQ.Data V5 从入门到放弃ORM系列:教程 - Log、SysLogs两个日志类使用
Log 静态类介绍: Public Static (Shared) Methods GetExceptionMessage 获取异常的内部信息 WriteLogToDB Overloaded. 将日志 ...
- 《深入理解Java虚拟机》调优案例分析与实战
上节学习回顾 在上一节当中,主要学习了Sun JDK的一些命令行和可视化性能监控工具的具体使用,但性能分析的重点还是在解决问题的思路上面,没有好的思路,再好的工具也无补于事. 本节学习重点 在书本上本 ...
- 从Java文件到字节码文件
本文涉及的javac编译器来自openjdk. javac的目录地址为:解压目录/langtools/src/share/classes/com/sun/tools/javac/ javac编译器将J ...
- [Solr] (源) Solr与MongoDB集成,实时增量索引
一. 概述 大量的数据存储在MongoDB上,需要快速搜索出目标内容,于是搭建Solr服务. 另外一点,用Solr索引数据后,可以把数据用在不同的项目当中,直接向Solr服务发送请求,返回xml.js ...
- Entity Framework 6 Recipes 2nd Edition(13-2)译 -> 用实体键获取一个单独的实体
问题 不管你用DBFirst,ModelFirst或是CodeFirst的方式,你想用实体键获取一个单独的实体.在本例中,我们用CodeFirst的方式. 解决方案 假设你有一个模型表示一个Paint ...
- MySQL有趣的查询方式
背景介绍 美国大选开始了,国防部要求我对两个总统候选人的票数进行统计.我首先简单的进行一次无条件查询,了解了一下表格的结构及所有数据长什么样子. select * from foo 查询到的结果令我很 ...
- 【.net深呼吸】WPF异步加载大批量图像
如何在WPF中加载大批量数据,并且不会阻塞UI线程,尤其是加载大量图片时,这活儿一直是很多朋友都相当关注的.世上没有最完美的解决之道,咱们但求相对较优的方案. 经过一些试验和对比,老周找到了一种算是不 ...
- JavaScript权威设计--Window对象之Iframe(简要学习笔记十四)
1.Window对象属性的文档元素(id) 如果在HTML文档中用id属性来为元素命名,并且如果Window对象没有此名字的属性,Window对象会赋予一个属性,它的名字是id属性的值,而他们的值指向 ...
- 通读AFN③--HTTPS访问控制(AFSecurityPolicy),Reachability(AFNetworkReachabilityManager)
这一篇主要介绍使用AFN如何访问HTTPS网站以及这些做法的实现原理,还有介绍AFN的网络状态监测部分AFNetworkReachabilityManager,这个模块会和苹果官方推荐的Reachab ...
- 2. SVM线性分类器
在一个线性分类器中,可以看到SVM形成的思路,并接触很多SVM的核心概念.用一个二维空间里仅有两类样本的分类问题来举个小例子.如图所示 和是要区分的两个类别,在二维平面中它们的样本如上图所示.中间的直 ...