Android資料庫GreenDao
項目代碼
參考自
項目配置
1、項目目錄下 .gradle
檔案配置:
.gradle
buildscript {
repositories {
google()
jcenter()
// GreenDao倉庫
mavenCentral()
}
dependencies {
// ....
// GreenDao插件
classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0'
}
}
2、app目錄下 .gradle
配置
.gradle
apply plugin: 'com.android.application'
//GreenDao插件
apply plugin: 'org.greenrobot.greendao'
dependencies {
implementation 'org.greenrobot:greendao:3.3.0' //GreenDao依賴添加
}
greendao {
// 資料庫版本号,注意更新
schemaVersion 1
// 生成資料庫檔案的目錄
// targetGenDir 'src/main/java'
// 生成的資料庫相關檔案的包名
// daoPackage 'com.nianlun.greendao.gen'
}
使用說明
1、首先建立使用者實體類,如下:
@Entity
public class User {
@Id(autoincrement = true)//設定自增長
private Long id;
@Index(unique = true)//設定唯一性
private String perNo;
private String name;
private String sex;
}
實體類中詳細注解說明:
-
@Entity:表明這個實體類會在資料庫中生成一個與之相對應的表,其中可配置項:
nameInDb:可以自定義表名,表明該實體對應資料庫中的那張表,預設為實體類名;
indexes:定義索引,這裡可跨越多個列;
createInDb:如果是有多個實體都關聯這個表,可以把多餘的實體裡面設定為false避免重複建立(預設是true);
schema:一個項目中有多個schema時,表明要讓這個dao屬于哪個schema;
active:是否應該生成更新/删除/重新整理方法。如果Entity定義了 @ToOne 或 @ToMany關系,那麼獨立于該值是有效的。意為是否支援實體類之間update,refresh,delete等操作。
- @Id:對應資料表中的主鍵,是一條資料的唯一辨別。如果實體沒有聲明主鍵,預設建立Long類型主鍵"_id"自增。使用Long類型主鍵時可以通過@Id(autoincrement = true)設定為自增。
- @Property(nameInDb = “USER_NAME” ):可以自定義字段名,注意外鍵不能使用該屬性。表明這個屬性對應資料表中的 USER_NAME 字段。
- @NotNull:該屬性值不能為空。
- @Transient:該屬性不會被存入資料庫中。
- @Unique:表明該屬性在資料庫中隻能有唯一值。
- @Index:建立一個索引。通過name設定索引别名,也可以通過unique給索引添加限制。
- @Convert:指定一個PropertyConverter用于支援自定義類型(沒用過)。
- @ToOne:定義自己與一個實體對象的關系。
- @ToMany:定義自己與多個實體對象的關系(可不與@ToOne聯合使用)。@ToMany的屬性referencedJoinProperty,類似于外鍵限制。
- @JoinProperty:對于更複雜的關系,可以使用這個注解标明目标屬性的源屬性,起關聯作用。
- @JoinEntity:如果你在做多對多的關系,有其他的表或實體參與,可以給目标屬性添加這個額外的注解。
- @OrderBy:指定{@ToMany}關系的相關集合的排序,(propertyA, propertyB)預設為按主鍵ASC排序。
- @Generated:這個是build後greendao自動生成的,這個注解了解為防止重複,每一塊代碼生成後會加個hash作為标記。
2、實體類建完畢後,點選Android Studio中的 Make Project
Make Project
GreenDao
會自己為User實體類生成了對應的
Getter
、
Setter
方法以及兩個構造函數,同時在我們配置的
com.example.greendaodemo.bean
包下生成了三個對應類檔案
DaoMaster
、
DaoSession
和
UserDao
,之後所有相關的資料庫操作都依靠這三個檔案了:
- DaoMaster:使用greenDAO的切入點。DaoMaster儲存資料庫對象(SQLiteDatabase)并管理特定模式的DAO類(而不是對象)。 它具有靜态方法來建立表或将它們删除。 其内部類OpenHelper和DevOpenHelper是在SQLite資料庫中建立模式的SQLiteOpenHelper實作。一個DaoMaster就代表着一個資料庫的連接配接;
- DaoSession:管理特定模式的所有可用DAO對象,您可以使用其中一個getter方法擷取。 DaoSession還為實體提供了一些通用的持久性方法,如插入,加載,更新,重新整理和删除。 DaoSession可以讓我們使用一些Entity的基本操作和擷取Dao操作類,DaoSession可以建立多個,每一個都是屬于同一個資料庫連接配接的;
- XxDAO:資料通路對象(DAO)持續存在并查詢實體。 對于每個實體,GreenDAO生成一個DAO。 它比DaoSession有更多的持久化方法,例如:count,loadAll和insertInTx等。
3、資料庫操作
(1)編寫
DaoManager
,用于建立資料庫、建立資料庫表、包含增删改查的操作。
(2)編寫
CommonDaoUtils
,用于完成對資料表的操作。
(3)編寫
DaoUtilsStore
,用于存放及提取
DaoUtils
。
(4)調用
DaoUtilsStore
,進行資料操作及檢視。
代碼詳見