GreenDAO 是一款開源的面向 Android 的輕便、快捷的 ORM 框架,將 Java 對(duì)象映射到 SQLite 數(shù)據(jù)庫(kù)中,我們操作數(shù)據(jù)庫(kù)的時(shí)候,不再需要編寫復(fù)雜的 SQL語句, 在性能方面,greenDAO 針對(duì) Android 進(jìn)行了高度優(yōu)化,最小的內(nèi)存開銷 、依賴體積小 同時(shí)還是支持 數(shù)據(jù)庫(kù)加密。
greenDAO 官網(wǎng)地址:greenDAO: Android ORM for your SQLite database - Open Source by greenrobot
greenDAO GitCode 源碼地址:https://github.com/greenrobot/greenDAO
GreenDao 特征
??? 1、支持 protocol buffer(protobuf) 協(xié)議
??? GreenDao 支持 protocol buffer(protobuf) 協(xié)議數(shù)據(jù)的直接存儲(chǔ),如果你通過 protobuf 協(xié)議與服務(wù)器交互,將不需要任何的映射
??? 2、代碼生成
??? greenDAO 會(huì)根據(jù)配置信息自動(dòng)生成核心管理類以及 DAO 對(duì)象
??? 3、性能
??? 所有 ORM 數(shù)據(jù)庫(kù)的,greenDAO 是最快的,greenDAO 不作性能方面任何妥協(xié)
核心類介紹
1、DaoMaster:
使用 greenDAO 的入口點(diǎn)。DaoMaster 負(fù)責(zé)管理數(shù)據(jù)庫(kù)對(duì)象(SQLiteDatabase)和 DAO 類(對(duì)象),我們可以通過它內(nèi)部類 OpenHelper 和 DevOpenHelper SQLiteOpenHelper 創(chuàng)建不同模式的 SQLite 數(shù)據(jù)庫(kù)。
2、DaoSession :
管理指定模式下的所有 DAO 對(duì)象,DaoSession 提供了一些通用的持久性方法比如插入、負(fù)載、更新和刪除實(shí)體。
3、XxxDAO :
對(duì)于每個(gè)實(shí)體類, greenDAO 都會(huì)生成一個(gè)與之對(duì)應(yīng) DAO 對(duì)象,如:User 實(shí)體,則會(huì)生成一個(gè) UserDao 類
4、Entities:
可持久化對(duì)象。通常,實(shí)體對(duì)象代表一個(gè)數(shù)據(jù)庫(kù)行,使用標(biāo)準(zhǔn) Java 屬性(如一個(gè) POJO 或 JavaBean )
集成GreenDao
1、build.gradle(Module:app)中添加配置與依賴
(1)
apply plugin: 'org.greenrobot.greendao' //添加greendao apply plugin
android {
*
*
}
(2)
android {
*
*
// greendao配置
greendao {
//數(shù)據(jù)庫(kù)版本號(hào),升級(jí)時(shí)修改
schemaVersion 1
//生成的DAO,DaoMaster和DaoSession的包路徑。默認(rèn)與表實(shí)體所在的包路徑相同
daoPackage 'com.chy.greendao'
//生成源文件的路徑。默認(rèn)源文件目錄是在build目錄中的(build/generated/source/greendao)
targetGenDir 'src/main/java'
}
}
(3)
//引入GreenDao數(shù)據(jù)庫(kù),存儲(chǔ)數(shù)據(jù)
implementation 'org.greenrobot:greendao:3.3.0' // add library
//Gson依賴
implementation 'com.google.code.gson:gson:2.8.5'
2、build.gradle(Project:xxx)中添加配置
// 添加插件 更好支持GreenDao
classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0'
創(chuàng)建Myapplication類:
public class Myapplication extends Application {
public static DaoSession daoSession;
@Override
public void onCreate() {
super.onCreate();
initDb();
}
/**
* 數(shù)據(jù)庫(kù)初始化
* */
public void initDb () {
// 獲取SQLiteOpenHelper對(duì)象devOpenHelper
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(this, "mydb.db");
// 獲取SQLiteDatabase
SQLiteDatabase db = devOpenHelper.getWritableDatabase();
// 加密數(shù)據(jù)庫(kù)(這句話無法運(yùn)行)
//Database database = devOpenHelper.getEncryptedWritableDb("12345");
//DaoMaster daoMaster = new DaoMaster(database);
// 創(chuàng)建DaoMaster實(shí)例
// DaoMaster保存數(shù)據(jù)庫(kù)對(duì)象(SQLiteDatabase)并管理特定模式的Dao類(而不是對(duì)象)。
// 它具有靜態(tài)方法來創(chuàng)建表或?qū)⑺鼈儎h除。
// 其內(nèi)部類OpenHelper和DevOpenHelper是在SQLite數(shù)據(jù)庫(kù)中創(chuàng)建模式的SQLiteOpenHelper實(shí)現(xiàn)。
DaoMaster daoMaster = new DaoMaster(db);
// 管理特定模式的所有可用Dao對(duì)象
daoSession = daoMaster.newSession();
}
}
?在AndroidManifest.xml添加自定義的Myapplication
創(chuàng)建Entity
package com.chy.table;
import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Property;
import org.greenrobot.greendao.annotation.Generated;
@Entity(nameInDb = "patrol_table")
public class PatrolTable {
/**
* 主鍵 Long型,可以通過@Id(autoincrement = true)設(shè)置自增長(zhǎng)。
* 通過這個(gè)注解標(biāo)記的字段必須是Long,數(shù)據(jù)庫(kù)中表示它就是主鍵,并且默認(rèn)是自增的。
*/
@Id(autoincrement = true)
private Long id;
/**
* Unique 屬性給數(shù)據(jù)庫(kù)的列添加了一個(gè)唯一性限制。注意,SQLite也會(huì)隱式地為它創(chuàng)建一個(gè)索引。
* Property :屬性指定數(shù)據(jù)庫(kù)的字段名稱。默認(rèn)是駝峰轉(zhuǎn)成大寫的下劃線隔開的名稱,比如:UserAge 轉(zhuǎn)成 USER_AGE
*/
// @Unique
@Property(nameInDb = "patroler_massif")
private String patrolerMassif;// 巡查地塊
@Property(nameInDb = "patroler_person")
private String patrolerPerson;// 巡查人員
@Property(nameInDb = "patroler_time")
private String patrolerTime;// 巡查時(shí)間
@Generated(hash = 2022133330)
public PatrolTable(Long id, String patrolerMassif, String patrolerPerson,
String patrolerTime) {
this.id = id;
this.patrolerMassif = patrolerMassif;
this.patrolerPerson = patrolerPerson;
this.patrolerTime = patrolerTime;
}
@Generated(hash = 824963258)
public PatrolTable() {
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getPatrolerMassif() {
return this.patrolerMassif;
}
public void setPatrolerMassif(String patrolerMassif) {
this.patrolerMassif = patrolerMassif;
}
public String getPatrolerPerson() {
return this.patrolerPerson;
}
public void setPatrolerPerson(String patrolerPerson) {
this.patrolerPerson = patrolerPerson;
}
public String getPatrolerTime() {
return this.patrolerTime;
}
public void setPatrolerTime(String patrolerTime) {
this.patrolerTime = patrolerTime;
}
}
創(chuàng)建完entity,點(diǎn)擊Make Project 如圖所示:
如果配置正確,會(huì)在配置的包目錄下自動(dòng)會(huì)生成DaoMaster,DaoSession 和XXXDao 類 。
?
定義GreenDaoManager類:文章來源:http://www.zghlxwxcb.cn/news/detail-645096.html
/**
* 自定義Manager
* */
public class GreenDaoManager {
private Context mContext;
private PatrolTableDao mPatrolTableDao;
// 構(gòu)造函數(shù)
private GreenDaoManager(Context context){
mContext = context;
mPatrolTableDao = Myapplication.daoSession.getPatrolTableDao();
}
/**
* 單例
* */
private static GreenDaoManager INSTANCE;
public static GreenDaoManager getInstance(Context context){
if (INSTANCE == null){
INSTANCE = new GreenDaoManager(context);
}
return INSTANCE;
}
//添加一條數(shù)據(jù)到數(shù)據(jù)庫(kù)
public long insertPatrolTable (PatrolTable patrolTable) {
long flag = mPatrolTableDao.insertOrReplace(patrolTable);
return flag;
}
// 批量插入數(shù)據(jù)
public void insertPatrolTables(List<PatrolTable> patrolTableList){
mPatrolTableDao.insertInTx(patrolTableList);
}
//查詢所有
public List<PatrolTable> queryPatrolTable(){
QueryBuilder<PatrolTable> query = mPatrolTableDao.queryBuilder()
.orderAsc(PatrolTableDao.Properties.Id);
return query.list();
}
//查詢地塊名稱
public List<PatrolTable> queryMassif(String massifName){
QueryBuilder<PatrolTable> query = mPatrolTableDao.queryBuilder();
query = query.where(PatrolTableDao.Properties.PatrolerMassif.eq(massifName))
.orderAsc(PatrolTableDao.Properties.Id);;
return query.list();
}
//查詢巡查人員
public List<PatrolTable> queryPerson(String personName){
QueryBuilder<PatrolTable> query = mPatrolTableDao.queryBuilder();
query = query.where(PatrolTableDao.Properties.PatrolerPerson.eq(personName))
.orderAsc(PatrolTableDao.Properties.Id);
return query.list();
}
//刪除指定數(shù)據(jù)
public void deletePatrolTable(PatrolTable patrolTable){
mPatrolTableDao.delete(patrolTable);
}
//更新數(shù)據(jù)
public void updatePatrolTable(PatrolTable patrolTable){
mPatrolTableDao.update(patrolTable);
}
}
使用:文章來源地址http://www.zghlxwxcb.cn/news/detail-645096.html
private void initDB(){
GreenDaoManager instance = GreenDaoManager.getInstance(this);
//創(chuàng)建數(shù)據(jù)
PatrolTable patrolTable = new PatrolTable();
patrolTable.setPatrolerPerson("張三");
patrolTable.setPatrolerMassif("南湖公園");
patrolTable.setPatrolerTime("2023-8-8 11:21");
/** 添加數(shù)據(jù) **/
long flag = instance.insertPatrolTable(patrolTable);
System.out.println(flag);
/** 獲取數(shù)據(jù) **/
List<PatrolTable> patrolTables = instance.queryMassif(patrolTable.getPatrolerMassif());
Gson gson = new Gson();
String json = gson.toJson(patrolTables);
System.out.println("JSON"+json);
/** 修改數(shù)據(jù) **/
PatrolTable updatePatrolTable = new PatrolTable();
updatePatrolTable.setId(1l);
updatePatrolTable.setPatrolerPerson("李四");
updatePatrolTable.setPatrolerMassif("西湖公園");
updatePatrolTable.setPatrolerTime("2023-8-10 11:21");
instance.updatePatrolTable(updatePatrolTable);
/**
* 獲取所有數(shù)據(jù)
* */
List<PatrolTable> allPatrolTables = instance.queryPatrolTable();
Gson gson2 = new Gson();
String json2 = gson2.toJson(allPatrolTables);
System.out.println("JSON2"+json2);
}
到了這里,關(guān)于Android 數(shù)據(jù)庫(kù)之GreenDAO的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!