一、GreenDao的介紹
GreenDAO是一個開源的Android ORM(“對象/關系映射”),通過ORM(稱為“對象/關系映射”),節省了我們在數據庫開發過程的時間!
通過GreenDao,我們可以更快速的操作數據庫,我們可以使用簡單的面相對象的API來存儲,更新,刪除和查詢Java對象。
GreenDao的優缺點?
1. 高性能
2. 易於使用的強大API,涵蓋關系和連接
3. 最小的內存消耗
4. 庫大小(<100KB)以保持較低的構建時間並避免65k方法限制
5. 數據庫加密:greenDAO支持SQLCipher,以確保用戶的數據安全;
GreenDao的核心類
GreenDao的核心類有三個:分別是DaoMaster, DaoSession, XXXDao,這三個類都會自動創建,無需自己編寫創建!
- DaoMaster::DaoMaster保存數據庫對象並管理特定模式的DAO類。它有靜態方法來創建表或刪除它們。它的內部類OpenHelper和DevOpenHelper是SQLiteOpenHelper實現,它們在SQLite數據庫中創建模式。
- DaoSession:管理特定模式的所有可用DAO對象,您可以使用其中一個getter方法獲取該對象。DaoSession還提供了一些通用的持久性方法,如實體的插入,加載,更新,刷新和刪除。
- XXXDao:數據訪問對象(DAO)持久存在並查詢實體。對於每個實體,greenDAO生成DAO。它具有比DaoSession更多的持久性方法。
- Entities :可持久化對象。通常, 實體對象代表一個數據庫行使用標准 Java 屬性(如一個POJO 或 JavaBean )。
二、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