1驰坊、配置
1.1 在project的Gradle中配置:
buildscript {
repositories {
? ? ? ? ?jcenter()
? ? ? ? ? mavenCentral()// 添加這一行
}
dependencies {
? ? ? ? classpath'com.android.tools.build:gradle:2.3.3'
? ? ? ? classpath'org.greenrobot:greendao-gradle-plugin:3.2.2' // 添加這一行
? ? ? ? // NOTE: Do not place your application dependencies here; they belong
? ? ? ? // in the individual module build.gradle files
}
}
allprojects {
? ? ? ? repositories {
? ? ? ? ? ? ? ?jcenter()
? ? ? ? }
}
1.2 在app的Gradle中配置:
applyplugin:'com.android.application'
applyplugin:'org.greenrobot.greendao'// 添加這一行
dependencies {
? ? ? ? compile'org.greenrobot:greendao:3.2.2'// 添加依賴
}
1.3 在app的Gradle配置數(shù)據(jù)庫版本等信息
greendao {
? ? ? ? ? schemaVersion 1 // 指定數(shù)據(jù)庫schema版本號(hào),遷移等操作會(huì)用到;
? ? ? ? ? daoPackage 'com.greendao.gen'? //dao的包名碎赢,包名默認(rèn)是entity所在的包荚虚;
? ? ? ? ? targetGenDir 'src/main/java'? //生成數(shù)據(jù)庫文件的目錄;
}
2薛夜、在項(xiàng)目中定義實(shí)體類
# User.java
@Entity
public classUser {
? ? ? ? @Id
? ? ? ? private long id;
? ? ? ? @Property(nameInDb="USERNAME")
? ? ? ? @NotNull
? ? ? ? private String name;
? ? ? ? @Unique
? ? ? ? private String mobile;
? ? ? ? private int gender;
? ? ? ? private int age;
? ? ? ? private Date birthday;
? ? ? ? @Transient
? ? ? ? private String remarks;?
}
注解:
@Entity?? 標(biāo)識(shí)實(shí)體類,greenDAO會(huì)映射成sqlite的一個(gè)表曲管,表名為實(shí)體類名的大寫形式
@Id 標(biāo)識(shí)主鍵却邓,該字段的類型為long或Long類型,autoincrement設(shè)置是否自動(dòng)增長
@Property?????? 標(biāo)識(shí)該屬性在表中對(duì)應(yīng)的列名稱, nameInDb設(shè)置名稱
@Transient????? 標(biāo)識(shí)該屬性將不會(huì)映射到表中院水,也就是沒有這列
@NotNull???????? 設(shè)置表中當(dāng)前列的值不可為空
@Convert???????? 指定自定義類型(@linkPropertyConverter)
@Generated?? greenDAO運(yùn)行所產(chǎn)生的構(gòu)造函數(shù)或者方法腊徙,被此標(biāo)注的代碼可以變更或者下次運(yùn)行時(shí)清除
@Index??? 使用@Index作為一個(gè)屬性來創(chuàng)建一個(gè)索引;定義多列索引(@link Entity#indexes())
@JoinEntity???? 定義表連接關(guān)系
@JoinProperty???????? 定義名稱和引用名稱屬性關(guān)系
@Keep???? 注解的代碼段在GreenDao下次運(yùn)行時(shí)保持不變
? ? ? ? ?1.注解實(shí)體類:默認(rèn)禁止修改此類
? ? ? ? ?2.注解其他代碼段檬某,默認(rèn)禁止修改注解的代碼段
@OrderBy??????? 指定排序
@ToMany???????? 定義與多個(gè)實(shí)體對(duì)象的關(guān)系
@ToOne? 定義與另一個(gè)實(shí)體(一個(gè)實(shí)體對(duì)象)的關(guān)系
@Unique 向數(shù)據(jù)庫列添加了一個(gè)唯一的約束
定義好了之后按ctrl+F9(或者工具欄build下面的Make Project)對(duì)項(xiàng)目進(jìn)行重新構(gòu)建撬腾,在daoPackage的目錄下就會(huì)自動(dòng)生成代碼
3、使用
# App.java
public class App extends Application {
private DaoMaster.DevOpenHelper mHelper;
private SQLiteDatabase db;
private DaoMaster mDaoMaster;
private DaoSession mDaoSession;
public static App instances;
public static App getInstances() {
? ? ? ? ? ?return instances;
}
@Override
public voidonCreate() {
? ? ? ? ? ? super.onCreate();
? ? ? ? ? ? instances=this;
? ? ? ? ? ? setDatabase();
}
/**
* 設(shè)置greenDao
*/
private void setDatabase() {
// 通過 DaoMaster 的內(nèi)部類 DevOpenHelper恢恼,你可以得到一個(gè)便利的 SQLiteOpenHelper 對(duì)象民傻。
// 可能你已經(jīng)注意到了,你并不需要去編寫「CREATE TABLE」這樣的 SQL 語句场斑,因?yàn)?greenDAO 已經(jīng)幫你做了漓踢。
// 注意:默認(rèn)的 DaoMaster.DevOpenHelper 會(huì)在數(shù)據(jù)庫升級(jí)時(shí),刪除所有的表漏隐,意味著這將導(dǎo)致數(shù)據(jù)的丟失喧半。
// 所以,在正式的項(xiàng)目中青责,你還應(yīng)該做一層封裝挺据,來實(shí)現(xiàn)數(shù)據(jù)庫的安全升級(jí)。
mHelper=new DaoMaster.DevOpenHelper(this,"myproject-db", null);
db=mHelper.getWritableDatabase();
// 注意:該數(shù)據(jù)庫連接屬于 DaoMaster脖隶,所以多個(gè) Session 指的是相同的數(shù)據(jù)庫連接扁耐。
mDaoMaster=new DaoMaster(db);
mDaoSession=mDaoMaster.newSession();
}
public DaoSession getDaoSession() {
? ? ? ?return mDaoSession;
}
public SQLiteDatabase getDb() {
? ? ? ? ?return db;
}
}
# MainActivity.java
獲取UserDao對(duì)象:
UserDao mUserDao = MyApplication.getInstances().getDaoSession().getUserDao();?
增
? ? ? ? User mUser=new User((long)1,"豆?jié){油條","18601952581",1,28,TimeUtils.strToDate("1990-01-01"));
? ? ? ? mUserDao.insertOrReplace(mUser);//添加一個(gè)
刪
? ? ? ? ?mUserDao.deleteByKey(id); ? // 根據(jù)ID刪除
? ? ? ? ?mUserDao.deleteAll(); ? ?// 刪除所有
改
? ? ? ? ?User mUser=new User((long)1,"煎餅果子","18601952581",1,28,TimeUtils.strToDate("1990-09-23"));
? ? ? ? ?mUserDao.update(mUser);
查
List<users>=mUserDao.loadAll(); ? ?// 查詢所有
User mUser =mUserDao.loadByRowId(id); ? // 根據(jù)ID查詢一條