ORM框架--GreenDao 3.0基本使用指南

0. ORM框架--GreenDao 3.0基本使用指南

1. Gradle 的配置

這裏能夠參照官方的文檔進行最新的配置(本示例的版本等你看到可能就不是最新的了),可是值得注意的一點是,GreenDao 3.0與以前的變化比較大,因此用法也區別比較大,建議在搜索時加上版本號3.0進行更精細的搜索java

在項目(非Module)的build.gradle 文件中:android

buildscript {
    repositories {
        jcenter()
        mavenCentral() // 添加倉庫地址
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.1'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // 添加greendao插件
    }
}

在Module級別的 build.gradle 文件中:git

apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // 添加插件
 
dependencies {
    compile 'org.greenrobot:greendao:3.2.2' // 添加庫
}

參照官方Github鏈接: https://github.com/greenrobot/greenDAO 更改成最新配置(示例爲3.2.2github

2. 配置數據庫信息

android {
    ....
    greendao {
        schemaVersion 1
        daoPackage 'com.yourpackagename.greendao.gen'
        targetGenDir 'src/main/java'
        //targetGenDirTest:設置生成單元測試目錄
        //generateTests:設置自動生成單元測試用例
    }
    ...
}

daoPackage 'com.yourpackagename.greendao.gen'
指定greendao自動生成文件的存放路徑,我我的喜歡起名爲greendao.gen
greendao 表示使用的是greendao這個第三方庫
gen 表示自動生成,不要手動更改
前面加上本身的包名,這個實際就是一個路徑。怎麼放按你的習慣和團隊規範。sql

3. 編寫實體bean

配置完上面的信息後,點擊Sync Now同步一下工程,而後進行實體的編寫,這個過程長短依託網絡等因素。
注意:
若是同步後沒有生成代碼,最好的方法就是把項目運行一遍!數據庫

/**
 * Created by didikee on 2017/9/7.
 */
@Entity
public class User {

    @Id(autoincrement = true)
    private Long id = null;

    private Long time;
    private String name;
    private Boolean sex;
    @Generated(hash = 1524850927)
    public User(Long id, Long time, String name, Boolean sex) {
        this.id = id;
        this.time = time;
        this.name = name;
        this.sex = sex;
    }
    @Generated(hash = 586692638)
    public User() {
    }
    public Long getId() {
        return this.id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public Long getTime() {
        return this.time;
    }
    public void setTime(Long time) {
        this.time = time;
    }
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Boolean getSex() {
        return this.sex;
    }
    public void setSex(Boolean sex) {
        this.sex = sex;
    }


}

注意點:api

  1. 類須要加@Entity註解
  2. id 類型必須爲:Long而不是Long(這個兩個的區別你們確定知道,容易手誤而已,卻是插入數據崩潰)
  3. 若是要實現id自增,在建立實體時id爲null便可。

4. 開始操做數據

我習慣寫個統一的類管理各種實體Dao網絡

/**
 * Created by didikee on 2017/7/19.
 */

public class GreenDaoManager {
    private final static String dbName = "d_db";
    private static GreenDaoManager mInstance;
    private DaoMaster.DevOpenHelper openHelper;
    private Context context;

    private GreenDaoManager(Context context) {
        this.context = context;
        openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);
    }

    /**
     * 獲取單例引用
     * @param context
     * @return
     */
    public static GreenDaoManager getInstance(Context context) {
        if (mInstance == null) {
            synchronized (GreenDaoManager.class) {
                if (mInstance == null) {
                    mInstance = new GreenDaoManager(context);
                }
            }
        }
        return mInstance;
    }

    public InstaMediaDao getInstaMediaDao() {
        SQLiteDatabase writableDatabase = openHelper.getWritableDatabase();
        DaoMaster daoMaster = new DaoMaster(writableDatabase);
        DaoSession daoSession = daoMaster.newSession();
        return daoSession.getInstaMediaDao();
    }
    public UserDao getUserDao() {
        SQLiteDatabase writableDatabase = openHelper.getWritableDatabase();
        DaoMaster daoMaster = new DaoMaster(writableDatabase);
        DaoSession daoSession = daoMaster.newSession();
        return daoSession.getUserDao();
    }

}

使用就比較簡單了,調用對用實體Bean對應的Dao的方法便可。
例如,查詢:app

GreenDaoManager.getInstance(this).getUserDao().queryRaw(String where, String... selectionArg);

其餘的增刪改查就是api的熟悉問題了,基本上也和sqlite差很少,習慣就ok了。
網上其餘的教程不少,也可參考。框架

相關文章
相關標籤/搜索