首页 技术 正文
技术 2022年11月17日
0 收藏 385 点赞 4,575 浏览 3027 个字

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

至此完成

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,076
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,552
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,400
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,176
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,812
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,894