GreenDao實(shí)操案例
GreenDao實(shí)際項(xiàng)目使用
- 自動(dòng)生成數(shù)據(jù)對(duì)象
- 自帶版本更新機(jī)制(數(shù)據(jù)自動(dòng)遷移),可為一鍵升級(jí)
- 自帶FaceBook stetho的數(shù)據(jù)庫(kù)查詢調(diào)試工具
一.構(gòu)建項(xiàng)目(已有的請(qǐng)開(kāi)車到下面??)
// 添加依賴到主項(xiàng)目gradle
compile'org.greenrobot:greendao:3.2.0'
compile 'com.facebook.stetho:stetho:1.3.1'
初始化 stetho 在Applcation中進(jìn)行初始化的操作
Stetho.initializeWithDefaults(this)
二.自動(dòng)生成所有的對(duì)象
greendao-generato 是一個(gè) javalib moudle
右鍵run ~
自動(dòng)生成引用的Bean對(duì)象
自動(dòng)生成引用的Dao
自動(dòng)生成DaoMaster DaoSession管理類并且能想到的都給添加好了(只能看著它靜靜的幫你生成)
-
不行我要敲代碼沫屡,好的。
DatabaseManager管理類做統(tǒng)一管理
最后Applcation初始化
`
public static void main(String[] args) throws Exception {
Schema schema = new Schema(2, "com.classliu.greendao.db.bean"); //bean對(duì)象的路勁
schema.setDefaultJavaPackageDao("com.classliu.greendao.db.dao"); //dao對(duì)象路徑
addTest(schema);
addTest2(schema);
addTest3(schema);
addTest4(schema);
addTest5(schema);
//H:\demo\GreenDao\app\src
//H:\demo\GreenDao\app\src\main\java-gen
new DaoGenerator().generateAll(schema, "\\H:\\demo\\GreenDao\\app\\src\\main\\java-gen");
}
//生成bean對(duì)象
private static void addTest(Schema schema) {
Entity testData = schema.addEntity("TestData"); //
testData.addIdProperty().primaryKey().autoincrement();//primaryKey
testData.addStringProperty("reader"); //reader 是 string 類型
testData.addLongProperty("testLong"); //testLong 是 long 類型
testData.addDateProperty("testDate");//testDate 是long 類型
testData.addIntProperty("testInt");// testInt 是int 類型
testData.addBooleanProperty("testBoolean"); //testBoolean 是布爾類型
testData.addIntProperty("creatId");
}
private static void addTest2(Schema schema) {
Entity testData = schema.addEntity("TestData2");
testData.addIdProperty().primaryKey().autoincrement();
testData.addStringProperty("testString");
testData.addLongProperty("testLong");
testData.addDateProperty("testDate");
testData.addIntProperty("testInt");
testData.addBooleanProperty("testBoolean");
}
private static void addTest3(Schema schema) {
Entity testData = schema.addEntity("TestData3");
testData.addIdProperty().primaryKey().autoincrement();
testData.addStringProperty("testString");
testData.addLongProperty("testLong");
testData.addDateProperty("testDate");
testData.addIntProperty("testInt");
testData.addBooleanProperty("testBoolean");
}
private static void addTest4( Schema schema) {
Entity testData = schema.addEntity("TestData4");
testData.addIdProperty().primaryKey().autoincrement();
testData.addStringProperty("reader");
testData.addStringProperty("readerString");
testData.addIntProperty("testInt");
testData.addBooleanProperty("testBoolean");
}
private static void addTest5(Schema schema) {
Entity testData = schema.addEntity("TestData5");
testData.addIdProperty().primaryKey().autoincrement();
testData.addStringProperty("testString");
testData.addLongProperty("testLong");
testData.addDateProperty("testDate");
testData.addIntProperty("testInt");
testData.addBooleanProperty("testBoolean");
}
`
三.數(shù)據(jù)庫(kù)升級(jí)(數(shù)據(jù)遷移)
MySQLiteOpenHelper extends DaoMaster.OpenHelper
重寫(xiě)DaoMaster.OpenHelper
在onUpgrade方法中寫(xiě)出符合項(xiàng)目需求的升級(jí)操作贵试,因?yàn)轫?xiàng)目各異所有工具類的使用需要根據(jù)自身的要求量身需改。
- 增加刪table 只需要?jiǎng)h除 添加class文件(可變參數(shù)的個(gè)數(shù))
- 增加刪table 中的列只需要修改對(duì)應(yīng)table的變量
一句話總結(jié):修改你的Bean對(duì)象凯正,就歐了
四.結(jié)合標(biāo)準(zhǔn)MVP結(jié)構(gòu)
模擬網(wǎng)絡(luò)數(shù)據(jù)的請(qǐng)求毙玻,可結(jié)合至實(shí)際項(xiàng)目
數(shù)據(jù)庫(kù)的數(shù)據(jù)操作,可與實(shí)際的網(wǎng)絡(luò)請(qǐng)求相對(duì)接廊散,方便易用桑滩,真實(shí)可靠。(具體的操作)
Demo中主要提供一些關(guān)于數(shù)據(jù)庫(kù)的操作
增加允睹,刪除所有 运准,
具體的增刪改查的操作-
大批量的更新數(shù)據(jù)庫(kù)耗時(shí)優(yōu)化體驗(yàn)
項(xiàng)目中提供增加10000條數(shù)據(jù)、異步增加10000條數(shù)據(jù)
異步多線程操作方式缭受,開(kāi)啟三個(gè)線程池同時(shí)進(jìn)行數(shù)據(jù)庫(kù)的操作
五.總結(jié)
經(jīng)實(shí)際測(cè)試:
數(shù)據(jù)遷移的時(shí)間在 25——30ms之間(1000條)
-
直接插入10000條數(shù)據(jù)大約耗時(shí) 900--950ms 異步工具耗時(shí)是 1/100(運(yùn)行Demo效果更感人)
你需要親自運(yùn)行一下代碼~擁抱開(kāi)源胁澳,感謝GreenDao !C渍摺韭畸!我不是代碼的創(chuàng)造者,我是工具宣傳員
感謝:如果喜歡本文加個(gè)收藏關(guān)注塘雳, Github star一下 Orz