一、greenDAO簡介
greenDAO是一款開源的面向 Android 的輕便、快捷的 ORM 框架,將 Java 對(duì)象映射到SQLite數(shù)據(jù)庫中,我們操作數(shù)據(jù)庫的時(shí)候,不再需要編寫復(fù)雜的 SQL語句, 在性能方面,greenDAO針對(duì) Android 進(jìn)行了高度優(yōu)化, 最小的內(nèi)存開銷 、依賴體積小 同時(shí)還是支持?jǐn)?shù)據(jù)庫加密。

greenDAO項(xiàng)目地址:https://github.com/greenrobot/greenDAO
二、greenDAO特征
1、對(duì)象映射( ORM)
greenDAO是ORM 框架,可以非常便捷的將Java 對(duì)象映射到 SQLite 數(shù)據(jù)庫中保存。
2、 高性能
ORM 框架有很多,比較著名的有 OrmLite , ActiveAndroid 等
greenDAO官方給出了這三者的性能對(duì)比。
3、支持加密
三、greenDAO集成
1、設(shè)置倉庫與插件(Project: build.gradle)
repositories {
jcenter()
mavenCentral() // add repository
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.1'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
}
}
2、配置依賴 ( Module:app build.gradle )
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
dependencies {
implementation 'org.greenrobot:greendao:3.2.2' // add library
}
3、配置數(shù)據(jù)庫相關(guān)信息 ( Module:app build.gradle )
android {
greendao {
//版本號(hào),升級(jí)時(shí)可配置
schemaVersion defaultConfig.versionCode
daoPackage 'xxx.xxx.xxx.xxx'
targetGenDir 'src/main/java'
}
}
4、Sync Project with Gradle Files 同步工程 即可
四、greenDAO注解解釋
1、@Entity
表明這個(gè)實(shí)體類會(huì)在數(shù)據(jù)庫中生成一個(gè)與之相對(duì)應(yīng)的表
schema:告知greenDAO當(dāng)前實(shí)體屬于哪個(gè) schema
schema active:標(biāo)記一個(gè)實(shí)體處于活躍狀態(tài),活動(dòng)實(shí)體有更新、刪除和刷新方法
nameInDb:在數(shù)據(jù)庫中使用的別名,默認(rèn)使用的是實(shí)體的類名,
indexes:定義索引,可以跨越多個(gè)列
createInDb:標(biāo)記創(chuàng)建數(shù)據(jù)庫表(默認(rèn):true)
generateConstructors 自動(dòng)創(chuàng)建全參構(gòu)造方法(同時(shí)會(huì)生成一個(gè)無參構(gòu)造方法)(默認(rèn):true)
generateGettersSetters 自動(dòng)生成 getters and setters 方法(默認(rèn):true)
2、@Id
對(duì)應(yīng)數(shù)據(jù)表中的 Id 字段
3、@Index
使用@Index作為一個(gè)屬性來創(chuàng)建一個(gè)索引,默認(rèn)是使用字段名
4、@Property
設(shè)置一個(gè)非默認(rèn)關(guān)系映射所對(duì)應(yīng)的列名,默認(rèn)是使用字段名
5、@NotNull
設(shè)置數(shù)據(jù)庫表當(dāng)前列不能為空
6、@Transient
添加此標(biāo)記后不會(huì)生成數(shù)據(jù)庫表的列
7、@Unique
表名該屬性在數(shù)據(jù)庫中只能有唯一值
8、@ToOne
表示一對(duì)一關(guān)系
9、@ToMany
定義一對(duì)多個(gè)實(shí)體對(duì)象的關(guān)系
10、@OrderBy
更加某一字段排序 ,例如:@OrderBy("date ASC")
5、demo
@Entity(nameInDb = "tb_user")
public class UserEntity {
@Id
private Long id;
@Property(nameInDb = "username")
private String username;
@Property(nameInDb = "password")
private String password;
@Property(nameInDb = "sex")
private int sex;
@Property(nameInDb = "birthday")
private Date birthday;