// 添加代碼倉(cāng)庫(kù) 步驟1
mavenCentral()
//greenDao生產(chǎn)代碼插件 步驟2
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
// apply plugin 步驟3
apply plugin: 'org.greenrobot.greendao'
//greenDAO配置添加依賴 步驟4
implementation 'org.greenrobot:greendao:3.2.2' // add library
implementation 'org.greenrobot:greendao-generator:3.2.2'
//greendao配置 步驟5 在buildTypes下面添加(數(shù)據(jù)庫(kù)版本號(hào)可用來(lái)給數(shù)據(jù)庫(kù)升級(jí))
greendao {
//數(shù)據(jù)庫(kù)版本號(hào)球散,升級(jí)時(shí)修改
schemaVersion 1
//生成的DAO檀夹,DaoMaster和DaoSession的包路徑只泼。默認(rèn)與表實(shí)體所在的包路徑相同
daoPackage 'com.example.xts.greendaodemo.db'
//生成源文件的路徑花嘶。默認(rèn)源文件目錄是在build目錄中的(build/generated/source/greendao)
targetGenDir 'src/main/java'
}
//第六步漠酿,
建bean類(lèi) 實(shí)體類(lèi)和數(shù)據(jù)庫(kù)對(duì)應(yīng),添加相關(guān)注解劫哼,然后編譯項(xiàng)目生成相關(guān)文件 錘項(xiàng)目(Make Project) 最常用的注解因該也就這是這些了吧
//一些基本使用的注解
@Entity 標(biāo)識(shí)實(shí)體類(lèi)洋只,greenDAO會(huì)映射成sqlite的一個(gè)表,表名為實(shí)體類(lèi)名的大寫(xiě)形式
@Id 標(biāo)識(shí)主鍵贬养,該字段的類(lèi)型為long或Long類(lèi)型挤土,autoincrement設(shè)置是否自動(dòng)增長(zhǎng)
@Property 標(biāo)識(shí)該屬性在表中對(duì)應(yīng)的列名稱, nameInDb設(shè)置名稱
@Transient 標(biāo)識(shí)該屬性將不會(huì)映射到表中,也就是沒(méi)有這列
@NotNull 設(shè)置表中當(dāng)前列的值不可為空
@Convert 指定自定義類(lèi)型(@linkPropertyConverter)
@Generated 運(yùn)行所產(chǎn)生的構(gòu)造函數(shù)或者方法误算,被此標(biāo)注的代碼可以變更或者下次運(yùn)行時(shí)清除
@Index 使用@Index作為屬性來(lái)創(chuàng)建一個(gè)索引仰美;
@JoinEntity 定義表連接關(guān)系
@JoinProperty 定義名稱和引用名稱屬性關(guān)系
@Keep 注解的代碼段在GreenDao下次運(yùn)行時(shí)保持不變
@OrderBy 指定排序方式
@ToMany 定義多個(gè)實(shí)體對(duì)象的關(guān)系
@ToOne 定義與另一個(gè)實(shí)體(一個(gè)實(shí)體對(duì)象)的關(guān)系
@Unique 向數(shù)據(jù)庫(kù)列添加唯一的約束
@Id(autoincrement = true) 主鍵自增
@NotNull 標(biāo)志這個(gè)字段不能是null
@Property(nameInDb = "User")
@Transient 表示不存儲(chǔ)在數(shù)據(jù)庫(kù)中
@Index(unique = true)
@Unique 用于標(biāo)志列的值的唯一性。
@Entity //這里是使用到的注解
public class Bean {
@Id //表示是表中的主鍵
private Long id; //一定是Long型
private String date;
@Unique //此字段的值唯一約束:不能重復(fù)
private String name;
private int step;
}
//第七步儿礼,
創(chuàng)建一個(gè)自己的application類(lèi)咖杂,在application中完成DaoSession的初始化,避免以后重復(fù)初始化蚊夫,便于使用 诉字,,知纷,要配置到清單中
public class BaseApp extends Application {
private static BaseApp sInstance;
private DaoMaster.DevOpenHelper mHelper;
private DaoMaster mDaoMaster;
private DaoSession mDaoSession;
@Override
public void onCreate() {
super.onCreate();
sInstance = this;
setDatabase();
}
/**
* 設(shè)置greenDao
? private void setDatabase() {
? //通過(guò)DaoMaster內(nèi)部類(lèi)DevOpenHelper可以獲取一個(gè)SQLiteOpenHelper 對(duì)象
? // 可能你已經(jīng)注意到了壤圃,你并不需要去編寫(xiě)「CREATE TABLE」這樣的 SQL 語(yǔ)句,因?yàn)?greenDAO 已經(jīng)幫你做了琅轧。
? // 注意:默認(rèn)的 DaoMaster.DevOpenHelper 會(huì)在數(shù)據(jù)庫(kù)升級(jí)時(shí)伍绳,刪除所有的表,意味著這將導(dǎo)致數(shù)據(jù)的丟失乍桂。
? // 所以冲杀,在正式的項(xiàng)目中效床,你還應(yīng)該做一層封裝,來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)的安全升級(jí)漠趁。
? // 此處MyDb表示數(shù)據(jù)庫(kù)名稱 可以任意填寫(xiě)
? mHelper = new DaoMaster.DevOpenHelper(this, "MyDb", null); // MyDb是數(shù)據(jù)庫(kù)的名字扁凛,更具自己的情況修改
? SQLiteDatabase db = mHelper.getWritableDatabase();
? mDaoMaster = new DaoMaster(db);
? mDaoSession = mDaoMaster.newSession();
? }
? public static BaseApp getInstance(){
? return sInstance;
? }
? public DaoSession getDaoSession(){
? return mDaoSession;
? }
}
//第八步
在清單中使用此BaseApp
<application
android:name=".BaseApp"
android:allowBackup="true"/>
//第九步 使用,
BeanDao beanDao = BaseApp.getInstance().getDaoSession().getBeanDao();
得到對(duì)象完成數(shù)據(jù)庫(kù)的創(chuàng)建闯传,表的創(chuàng)建谨朝,
//插入數(shù)據(jù)
beanDao.insert(new Bean(1l,"2019-8-27","張三","添加"));
//查詢所有數(shù)據(jù)
List<Bean> loadAll = beanDao.loadAll();
//刪除所有數(shù)據(jù)
dao.deleteAll();