GreenDao配置以及基本使用

// 添加代碼倉(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配置添加依賴(lài) 步驟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)的列名稱(chēng), nameInDb設(shè)置名稱(chēng)
@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         定義名稱(chēng)和引用名稱(chēng)屬性關(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ù)名稱(chēng) 可以任意填寫(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","張三","添加"));
//查詢(xún)所有數(shù)據(jù)
List<Bean> loadAll = beanDao.loadAll();
//刪除所有數(shù)據(jù)
dao.deleteAll();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容