Android數據庫GreenDao的使用總結

1、GreenDao的介紹

GreenDAO是一個開源的Android ORM(「對象/關係映射」),經過ORM(稱爲「對象/關係映射」),節省了咱們在數據庫開發過程的時間!java

經過GreenDao,咱們能夠更快速的操做數據庫,咱們可使用簡單的面相對象的API來存儲,更新,刪除和查詢Java對象。android

GreenDao的優缺點?

1.  高性能數據庫

2. 易於使用的強大API,涵蓋關係和鏈接安全

3. 最小的內存消耗app

4. 庫大小(<100KB)以保持較低的構建時間並避免65k方法限制dom

5. 數據庫加密:greenDAO支持SQLCipher,以確保用戶的數據安全;maven

GreenDao的核心類

GreenDao的核心類有三個:分別是DaoMaster, DaoSession, XXXDao,這三個類都會自動建立,無需本身編寫建立!ide

  • DaoMaster::DaoMaster保存數據庫對象並管理特定模式的DAO類。它有靜態方法來建立表或刪除它們。它的內部類OpenHelper和DevOpenHelper是SQLiteOpenHelper實現,它們在SQLite數據庫中建立模式。
  • DaoSession:管理特定模式的全部可用DAO對象,您可使用其中一個getter方法獲取該對象。DaoSession還提供了一些通用的持久性方法,如實體的插入,加載,更新,刷新和刪除。
  • XXXDao:數據訪問對象(DAO)持久存在並查詢實體。對於每一個實體,greenDAO生成DAO。它具備比DaoSession更多的持久性方法。
  • Entities :可持久化對象。一般, 實體對象表明一個數據庫行使用標準 Java 屬性(如一個POJO 或 JavaBean )。

2、GreenDao使用方法

1. 導入Gradle插件和Dao代碼生成

要在Android項目中使用GreenDao,您須要添加GreenDao Gradle插件並添加GreenDao庫:性能

a). 導入插件單元測試

// 在 Project的build.gradle 文件中添加:
buildscript {
    repositories {
        jcenter()
        mavenCentral() // add repository
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.2'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
    }
}

b). 配置相關依賴

// 在 Moudle:app的  build.gradle 文件中添加:
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
 
dependencies {
    implementation 'org.greenrobot:greendao:3.2.2' // add library
}

c). 配置數據庫相關信息

greendao {
    schemaVersion 1 //數據庫版本號
    daoPackage 'com.renhui.testapp.functions.database.greenDao.db'
// 設置DaoMaster、DaoSession、Dao 包名
    targetGenDir 'src.main.java'//設置DaoMaster、DaoSession、Dao目錄,請注意,這裏路徑用.不要用/
    generateTests false //設置爲true以自動生成單元測試。
    targetGenDirTests 'src/main/java' //應存儲生成的單元測試的基本目錄。默認爲 src / androidTest / java。
}

配置完成,在Android Studio中使用Build> Make Project,重寫build項目,GreenDao集成完成!

2. 建立存儲對象實體類

使用GreenDao存儲數據只須要在存儲數據類前面聲明@Entity註解就讓GreenDao爲其生成必要的代碼:

@Entity
public class Student {
    @Id(autoincrement = true)
    Long id;
    @Unique
    int studentNo;//學號
    int age; //年齡
    String telPhone;//手機號
    String sex; //性別
    String name;//姓名
    String address;//家庭住址
    String schoolName;//學校名字
    String grade;//幾年級
    ……getter and setter and constructor method……
    }

3. GreenDao初始化

咱們能夠在Application中維持一個全局的會話。咱們在Applicaiton進行數據庫的初始化操做:=

  /**
     * 初始化GreenDao,直接在Application中進行初始化操做
     */
    private void initGreenDao() {
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "aserbao.db");
        SQLiteDatabase db = helper.getWritableDatabase();
        DaoMaster daoMaster = new DaoMaster(db);
        daoSession = daoMaster.newSession();
    }
    
    private DaoSession daoSession;
    public DaoSession getDaoSession() {
        return daoSession;
    }

初始化完成以後從新rebuild一下項目會發如今設置的targetGenDir的目錄生成三個類文件,這個是GreenDao自動生成的!說明數據庫已經鏈接好了,我們接下來只須要進行數據庫的增刪改查操做就好了。

4. 使用GreenDao實現增刪改查

1. 增

insert() 插入數據

@Override
public void insertData(Thing s) {
    DaoSession daoSession = ((AserbaoApplication) getApplication()).getDaoSession();
    for (int i = 0; i < 1000; i++) {
        Student student = new Student();
        student.setStudentNo(i);
        int age = mRandom.nextInt(10) + 10;
        student.setAge(age);
        student.setTelPhone(RandomValue.getTel());
        String chineseName = RandomValue.getChineseName();
        student.setName(chineseName);
        if (i % 2 == 0) {
            student.setSex("男");
        } else {
            student.setSex("女");
        }
        student.setAddress(RandomValue.getRoad());
        student.setGrade(String.valueOf(age % 10) + "年紀");
        student.setSchoolName(RandomValue.getSchoolName());
        daoSession.insert(student);
    }
} 

insertOrReplace()數據存在則替換,數據不存在則插入

@Override
public void insertData(Thing s) {
    DaoSession daoSession = ((AserbaoApplication) getApplication()).getDaoSession();
    for (int i = 0; i < 1000; i++) {
        Student student = new Student();
        student.setStudentNo(i);
        int age = mRandom.nextInt(10) + 10;
        student.setAge(age);
        student.setTelPhone(RandomValue.getTel());
        String chineseName = RandomValue.getChineseName();
        student.setName(chineseName);
        if (i % 2 == 0) {
            student.setSex("男");
        } else {
            student.setSex("女");
        }
        student.setAddress(RandomValue.getRoad());
        student.setGrade(String.valueOf(age % 10) + "年紀");
        student.setSchoolName(RandomValue.getSchoolName());
        daoSession.insertOrReplace(student);//插入或替換
    }
} 

2. 刪

刪除有兩種方式:delete()和deleteAll();分別表示刪除單個和刪除全部。

 @Override
 public void deleteData(Student s) {
     DaoSession daoSession = ((AserbaoApplication) getApplication()).getDaoSession();
     daoSession.delete(s);
 }

 @Override
 public void deleteAll() {
     DaoSession daoSession = ((AserbaoApplication) getApplication()).getDaoSession();
     daoSession.deleteAll(Student.class);
 }

3. 改

經過update來進行修改:

@Override
public void updataData(Student s) {
    DaoSession daoSession = ((AserbaoApplication) getApplication()).getDaoSession();
    daoSession.update(s);
}

4. 查

查詢的方法有:

  • loadAll():查詢全部數據。
  • queryRaw():根據條件查詢。
  • queryBuilder() : 方便查詢的建立,後面詳細講解。
public List queryAll() {
    List<Student> students = daoSession.loadAll(Student.class);
    return students;
}

@Override
public void queryData(String s) {
    List<Student> students = daoSession.queryRaw(Student.class, " where id = ?", s);
    mDataBaseAdapter.addNewStudentData(students);
}

 

 


參考資料: https://www.jianshu.com/p/53083f782ea2
相關文章
相關標籤/搜索