概况
此文档主要描述greenDAO 3
的相关概念及使用,包括项目中的配置、数据操作(增删改查)等。
配置
与greenDAO 2的区别
greenDAO 2
(之前的版本)需要开发者在工程中另建一个独立的Java生成器
项目(需要使用到“greendao-generator”
依赖,来自动生成greenDAO需用的代码),然而greenDAO 3
只需使用注解
定义实体类,然后通过gradle插件
就可以生成代码
greenDAO 3的配置
添加gradle插件到buildscript
在工程的build.gradle
文件中添加gradle插件到buildscript
块中
|
|
根模块中使用gradle插件
在根模块的build.gradle文件中使用gradle插件
|
|
gradle插件的配置
在根模块的build.gradle文件中配置greendao
|
|
- schemaVersion:指定数据库
schema
的当前版本号,被*OpenHelpers
类使用,用于在不同的schema版本号之间迁移,如果修改了Entity
或数据库的schema,该值必须增加,默认是1 - daoPackage:用于存放生成的
DAO
、DaoMaster
和DaoSession
的包名,默认是源Entities的包名 - targetGenDir:生成的源码应存放的位置,默认是build目录下的generated文件夹下(
build/generated/source/greendao
) - generateTests:设置为
true
时自动生成单元测试代码 - targetGenGenTest:生成单元测试代码的存放位置
Gradle插件实现步骤
每次在make
工程时,Gradle插件会扫描工程中所有的@Entity
文件(greenDAO用到的数据库实体类),并根据实体类生成DaoMaster
、DaoSession
以及所有实体类的DAO类
,生成的文件默认目录为build/generated/source/greendao
基本概念
@Entity
@Entity
注解标记一个Java类为持久的实体,可以配置如下参数
- schema:告诉greenDAO该实体属于哪个schema(Note:当使用Gradle插件时目前不支持多个schemas)
- active:标记一个Entity的激活状态,激活的Entity有更新/删除/刷新方法
- nameInDb:指定表在数据库中的名称,默认是实体的类名
- indexes:定义跨越多列的索引
- createInDb:标记greenDAO是否创建数据库表,默认为true。如果有多个实体映射到同一个表,或者表在greenDAO外面创建了,可以设置为false
基本属性注解
- @Id:选择一个long/Long类型的属性作为实体ID。在数据库里,它是
主键(PK)
。参数autoincrement
是一个让ID值增加的标记(不重用旧值) - @Property:定义一个属性映射的非默认的列名,如果如果不指定,greenDAO默认以SQL-ish的形式使用域名,即大写、下划线代替驼峰,如customName会变成CUSTOM_NAME
- @NotNull:让属性在数据库里成为一个
“NOT NULL”
列 - @Transient:让属性不被存入持久层
索引注解
- @Index:为一个数据库列创建一个数据库索引
- name:如果不喜欢greenDAO生成的默认索引名,可以通过该字段指定
- unique:为该索引添加一个
UNIQUE
限制,强制所有值是唯一的
- @Unique:为一个数据库列添加一个
UNIQUE
限制。注意SQLite也默认创建了一个索引
关联注解
- @ToOne:定义与另一个实体的关联,应用该注解到有另一个实体对象的属性上。在内部,greenDAO需要一个额外的指向目标实体的属性,通过
joinProperty
参数来指定。如果没有该参数,一个额外的列会被自动创建并拥有此KEY
- @ToMany:定义与多个实体的关联,应用该注解到一组目标实体的属性上。目标实体必须有一个或多个指向源Entity的属性。有三种可能(只能使用其中一种)指定关联的映射
- referencedJoinProperty:指向目标Entity的ID的
外键(FK)
属性名 - joinProperties:为了更多复杂的关联,可以指定一组
@JoinProperty
注解。每个@JoinProperty需要一个源Entity的属性和目标Entity的属性
- referencedJoinProperty:指向目标Entity的ID的
- @JoinEntity:如果一个多对多的关联有另一个entity/table,可以在该属性上添加该注解
@Generated
在greenDAO 3中Entity类由开发者创建和编辑,在代码生成过程中,greenDAO会增加实体的源码,同时会添加@Generated
注解到生成的方法和域上来提示开发者,为了阻止任何代码的丢失。在大多数情况下,开发者不应该接触带有@Generated注解的代码。作为预防措施,greenDAO不会重写存在的代码,如果生成的代码被手动修改了,greenDAO会报错。
使用
编写Entity类
App.java
|
|
City.java
|
|
JoinCityToApp.java
|
|
CityInfo.java
|
|
增删改查操作
初始化数据库
获取DaoMaster.DevOpenHelper
的实例即可
|
|
增加操作
|
|
查询操作
|
|