GreenDAO是一個開源的Android ORM(「對象/關係映射」),經過ORM(稱爲「對象/關係映射」),節省了咱們在數據庫開發過程的時間!java
經過GreenDao,咱們能夠更快速的操做數據庫,咱們可使用簡單的面相對象的API來存儲,更新,刪除和查詢Java對象。android
1. 高性能數據庫
2. 易於使用的強大API,涵蓋關係和鏈接安全
3. 最小的內存消耗app
4. 庫大小(<100KB)以保持較低的構建時間並避免65k方法限制dom
5. 數據庫加密:greenDAO支持SQLCipher,以確保用戶的數據安全;maven
GreenDao的核心類有三個:分別是DaoMaster, DaoSession, XXXDao,這三個類都會自動建立,無需本身編寫建立!ide
要在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集成完成!
使用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…… }
咱們能夠在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自動生成的!說明數據庫已經鏈接好了,我們接下來只須要進行數據庫的增刪改查操做就好了。
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);//插入或替換 } }
刪除有兩種方式: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); }
經過update來進行修改:
@Override public void updataData(Student s) { DaoSession daoSession = ((AserbaoApplication) getApplication()).getDaoSession(); daoSession.update(s); }
查詢的方法有:
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); }