Now you can Subscribe using RSS

Submit your Email

2017/10/07

GreenDao 使用教學

asd
使用 GreenDao 可以方便我們在 Android 上操作 Sqlite 資料庫
以下是 GreenDao 官網與 GitHub 位置
如何在專案中導入 GreenDao
跟著 GitHub 上的教學依序的在 Gradle 上添加依賴

// In your root build.gradle file:
buildscript {
    repositories {
        jcenter()
        mavenCentral() // add repository
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
    }
}
 
// In your app projects build.gradle file:
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
 
dependencies {
    compile 'org.greenrobot:greendao:3.2.2' // add library
}
In your root build.gradle file
Android Studio 中 build.gradle(Project:your project name) 中添加依賴


In your app projects build.gradle file
Android Studio 中 build.gradle(Module:app) 中添加依賴

增加這幾個依賴後就可以開始使用 GreenDao

以下是使用 GreenDao 中可更動的參數設定
在 Module:app 的 gradle 中可以添加以下參數進行設置

  • schemaVersion : 設置你的 sqlite 版本號
  • daoPackage : 設置生成的 DaoMaster 和 DaoSession package 名稱
  • targetGenDir : 設置生成相關 .java 檔路徑;預設為 build/generated/source/greendao
  • generateTests : 使用 true 或 false 是否生成單元測試
  • targetGenDirTests : 設置生成的單元測試 .java 檔路徑:預設為 src/androidTest/java
寫入位置如下

接下來就是建立資料庫結構
建立方法有兩種

先介紹使用註解的方式
以下是建立表的 Code
package com.jrtou.greendaodemo.sqlite;

import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Index;
import org.greenrobot.greendao.annotation.NotNull;
import org.greenrobot.greendao.annotation.Property;
import org.greenrobot.greendao.annotation.Generated;

/**
 * Created by jrtou on 10/7/17.
 */

@Entity//告訴 greendao 自動生成工具這是 schema
public class BookEntry {
    @Id(autoincrement = true)//設置 sqlite id 為自動增長
    private Long id;

    @Property(nameInDb = "BookName")//設置欄位 並賦予名稱
    @Index(unique = true)//設置 索引
    @NotNull//設置 不能為空
    private String bookName;

    @Property(nameInDb = "BookPrice")
    @NotNull
    private String bookPrice;

    @Property(nameInDb = "Memo")
    private String memo;

    
}

寫好表的結構之後點選 build > make project 進行生成相關程式碼
等待生成後發現你的 code 產生了一點變化
package com.jrtou.greendaodemo.sqlite;

import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Index;
import org.greenrobot.greendao.annotation.NotNull;
import org.greenrobot.greendao.annotation.Property;
import org.greenrobot.greendao.annotation.Generated;

/**
 * Created by jrtou on 10/7/17.
 */

@Entity//告訴 greendao 自動生成工具這是 schema
public class BookEntry {
    @Id(autoincrement = true)//設置 sqlite id 為自動增長
    private Long id;

    @Property(nameInDb = "BookName")//設置欄位 並賦予名稱
    @Index(unique = true)//設置 索引
    @NotNull//設置 不能為空
    private String bookName;

    @Property(nameInDb = "BookPrice")
    @NotNull
    private String bookPrice;

    @Property(nameInDb = "Memo")
    private String memo;

    @Generated(hash = 1605761728)
    public BookEntry(Long id, @NotNull String bookName, @NotNull String bookPrice,
            String memo) {
        this.id = id;
        this.bookName = bookName;
        this.bookPrice = bookPrice;
        this.memo = memo;
    }

    @Generated(hash = 137482324)
    public BookEntry() {
    }

    public Long getId() {
        return this.id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getBookName() {
        return this.bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    public String getBookPrice() {
        return this.bookPrice;
    }

    public void setBookPrice(String bookPrice) {
        this.bookPrice = bookPrice;
    }

    public String getMemo() {
        return this.memo;
    }

    public void setMemo(String memo) {
        this.memo = memo;
    }
}
}
然後資料夾結構切換成 project 尋找 app/build/generated/source/greendao
可以看到工具幫你生成的 dao 相關操作 .java 檔案
代表成功建立操作資料庫相關程式碼

建立表結構之後寫一個 DBUtils 工具類
package com.jrtou.greendaodemo.utils;

import android.content.Context;

import com.jrtou.greendaodemo.sqlite.BookEntryDao;
import com.jrtou.greendaodemo.sqlite.DaoMaster;
import com.jrtou.greendaodemo.sqlite.DaoSession;

/**
 * Created by jrtou on 10/7/17.
 */

public class DBUtils {
    private static final String DB_NAME = "book.db";

    private static DBUtils mDBUtils = null;
    private DaoSession mDaoSession;

    public static DBUtils Instance(Context context) {
        if (mDBUtils == null)
            mDBUtils = new DBUtils(context);

        return mDBUtils;

    }

    private DBUtils(Context context) {
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, DB_NAME);
        DaoMaster daoMaster = new DaoMaster(helper.getWritableDb());
        mDaoSession = daoMaster.newSession();
    }

    public BookEntryDao getBookDao() {
        return mDaoSession.getBookEntryDao();
    }
}
比較推薦的是寫成單例模式(Singleton) 來進行資料庫操作
之後要操作資料庫動作之前只要這樣使用
 DBUtils dbUtils = DBUtils.Instance(this);
 BookEntryDao  mBookDao = dbUtils.getBookDao();
就可以進行資料庫的操作

0 意見:

張貼留言

Coprights @ 2016, Blogger Templates Designed By Templateism | Templatelib