1颈渊、greenDAO3的基本介紹:
greenDAO3使用注解的方式定義實(shí)體類(lèi)(entity)茵休,并且是通過(guò)安裝gradle插件來(lái)生成代碼。之前的版本則是通過(guò)建立一個(gè)獨(dú)立的java工程來(lái)存放生成的文件震叙。
2倚评、greenDAO3的配置:
①在gradle的dependencies中導(dǎo)入最新版本的依賴(lài):
compile 'org.greenrobot:greendao:3.0.1'
compile 'org.greenrobot:greendao-generator:3.0.0'
②配置gradle:gradle會(huì)自動(dòng)去maven倉(cāng)庫(kù)下載一個(gè)gradle的插件,用來(lái)生成數(shù)據(jù)庫(kù)相關(guān)的代碼
apply plugin: 'org.greenrobot.greendao'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0'
}
}
③每次Make Project的時(shí)候,greenDAO回去掃描項(xiàng)目中的所有的@Entity的文件(所有的greenDAO中數(shù)據(jù)庫(kù)的實(shí)體類(lèi)),根據(jù)實(shí)體類(lèi)生成DaoSession,DaoMaster以及所有實(shí)體類(lèi)的Dao類(lèi),生成的默認(rèn)目錄是:build/generated/source/greendao,可以將該路徑下生成的文件放到所需要的目錄下单鹿。若不想移動(dòng)生成的文件掀宋,則可以在gradle中自定義文件生成的路徑:
greendao {
schemaVersion 1
daoPackage 'com.wyk.greendaodemo.greendao.gen'
targetGenDir 'src/main/java'
}
3、greenDao3的使用:
①編寫(xiě)實(shí)體文件:
import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Transient;
@Entity
public class User {
@Id
private Long id;
private String name;
@Transient
private int tempUsageCount; // not persisted
}
注解解釋:
@Entity:將普通的java文件變成一個(gè)能夠被greenDAO識(shí)別的數(shù)據(jù)庫(kù)類(lèi)型的實(shí)體類(lèi)仲锄。
@Id:通過(guò)這個(gè)注解標(biāo)記的字段必須是Long類(lèi)型的,這個(gè)字段在數(shù)據(jù)庫(kù)中表示它就是默認(rèn)自增的劲妙。
@Transient:表示這個(gè)字段不會(huì)被寫(xiě)入數(shù)據(jù)庫(kù),只是作為普通的java類(lèi)字段,用來(lái)臨時(shí)存儲(chǔ)數(shù)據(jù),不會(huì)被持久化。
②編寫(xiě)實(shí)體文件后,點(diǎn)擊MakeProject,greenDAO3會(huì)自動(dòng)生成一些文件昼窗。(User中的get,set方法和一些構(gòu)造函數(shù),還生成了DaoMaster,DaoSession,UserDao)
③初始化數(shù)據(jù)庫(kù):
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(MyApplication.getContext(),"otes-db",null);
DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDatabase());
DaoSession daoSession = daoMaster.newSession();
UserDao userDao = daoSession.getUserDao();
④插入數(shù)據(jù):
User user = new User(null,"yangxy");
userDao.insert(user);
⑤查找數(shù)據(jù):
List<User> userList = userDao.queryBuilder()
.where(UserDao.Properties.Id.notEq(999))
.orderAsc(UserDao.Properties.Id)
.limit(5)
.build().list();
⑥修改數(shù)據(jù):修改數(shù)據(jù)的第一步是要把需要修改的條目給查出來(lái),然后修改該條目,最后調(diào)用userDao的update方法是趴。
User findUser = userDao.queryBuilder().where(UserDao.Properties.Name.eq("wyk")).build().unique();
if(findUser != null) {
findUser.setName(newName);
userDao.update(findUser);
Toast.makeText(MyApplication.getContext(), "修改成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MyApplication.getContext(), "用戶不存在", Toast.LENGTH_SHORT).show();
}
⑦刪除數(shù)據(jù):先查詢(xún)出需要?jiǎng)h除的條目,然后調(diào)用userDao的deleteByKey將該條目的主鍵傳入即可刪除澄惊。
User findUser = userDao.queryBuilder().where(UserDao.Properties.Name.eq("wyk")).build().unique();
if(findUser != null){
userDao.deleteByKey(findUser.getId());
}
4唆途、數(shù)據(jù)庫(kù)的升級(jí):
如果某張表修改了字段,或者新建了一張表,需要將build.gradle中的schemaVersion,否則當(dāng)升級(jí)APP