GreenDao 简介
greenDAO的源代码,有一部分是固有代码,另一部分则是编译生成的,他们协同合作完成了greenDAO的功能,即ORM(Object-relational mapping)。
关于ORM,我们可以参考官网的图:
从上图,我们可以很清楚的看到,greenDAO提供了从关系型数据库到Java对象的映射,从而使得开发者不用直接操作数据库而操作Java对象就可以了,减少了开发者的负担。
主流程梳理
简易的类关系图,可以参考官网的图:
配置
1.Add this to your root build.gradle (project level):
buildscript {
dependencies {
...
//数据库操作框架
classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0'
}
}
2.And this to our app's build.gradle (module level):
apply plugin: 'org.greenrobot.greendao' // after applying Android plugin
android {
...
greendao {
schemaVersion rootProject.dbVersion//版本控制
daoPackage 'com.xxx.xxx.greendao.gen'
targetGenDir 'src/main/java'
}
}
dependencies {
//操作数据库 greendao
api 'org.greenrobot:greendao:3.3.0'
api 'org.greenrobot:greendao-generator:3.3.0'
api 'io.github.yuweiguocn:GreenDaoUpgradeHelper:v2.2.1'
}
3.使用
- 创建实体类
import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Generated;
import org.greenrobot.greendao.annotation.Id;
@Entity
public class KeyWordBean {
@Id(autoincrement = true)
Long id;
String keyword;
@Generated(hash = 1121882475)
public KeyWordBean(Long id, String keyword) {
this.id = id;
this.keyword = keyword;
}
@Generated(hash = 673900408)
public KeyWordBean() {
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getKeyword() {
return this.keyword;
}
public void setKeyword(String keyword) {
this.keyword = keyword;
}
}
- 数据库版本更新控制类
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import com.github.yuweiguocn.library.greendao.MigrationHelper;
import com.lishuaihua.data_module.greendao.gen.DaoMaster;
import org.greenrobot.greendao.database.Database;
public class MySQLiteOpenHelper extends DaoMaster.OpenHelper {
public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
super(context, name, factory);
}
@Override
public void onUpgrade(Database db, int oldVersion, int newVersion) {
MigrationHelper.migrate(db, new MigrationHelper.ReCreateAllTableListener() {
@Override
public void onCreateAllTables(Database db, boolean ifNotExists) {
DaoMaster.createAllTables(db, ifNotExists);
}
@Override
public void onDropAllTables(Database db, boolean ifExists) {
DaoMaster.dropAllTables(db, ifExists);
}
}, KeyWordBeanDao.class);
}
}
- 数据库操作统一管理类
public class GreenDaoDataManager {
private final static String TAG = GreenDaoDataManager.class.getSimpleName();
private final static String dbName = "green_db";
private static GreenDaoDataManager mInstance;
private MySQLiteOpenHelper openHelper;
private SQLiteDatabase db;
private DaoMaster mDaoMaster;
private DaoSession mDaoSession;
public DaoSession getmDaoSession() {
return mDaoSession;
}
public GreenDaoDataManager(Context context) {
openHelper = new MySQLiteOpenHelper(context, dbName, null);
db = openHelper.getWritableDatabase();
mDaoMaster = new DaoMaster(db);
mDaoSession = mDaoMaster.newSession();
}
/**
* 初始化
* @param context
*/
public static void init(Context context) {
if (mInstance == null) {
synchronized (GreenDaoDataManager.class) {
if (mInstance == null) {
mInstance = new GreenDaoDataManager(context);
}
}
}
}
/**
* 获取单例引用
*/
public static GreenDaoDataManager getInstance() {
if (mInstance == null) {
try {
throw new Exception("please init dbmanager before use");
} catch (Exception e) {
e.printStackTrace();
}
}
return mInstance;
}
/**
* 新增 .修改
* @param keyWordBean
*/
public void insertKeyWordBean(KeyWordBean keyWordBean){
List<KeyWordBean> keyWordBeans = queryKeyWordBeans();
KeyWordBean repeatKeyWordBean=null;
for (int i = 0; i < keyWordBeans.size(); i++) {
KeyWordBean keywordBean=keyWordBeans.get(i);
if (keywordBean.getKeyword().equals(keyWordBean.getKeyword())){
repeatKeyWordBean=keywordBean;
}
}
if (repeatKeyWordBean!=null){
removeKeyWordBean(repeatKeyWordBean);
}
mDaoSession.getKeyWordBeanDao().insertOrReplace(keyWordBean);
}
/**
* 删全部
*/
public void clearKeyWordBeans() {
mDaoSession.getKeyWordBeanDao().deleteAll();
}
/**
* 删单个
* @param keyWordBean
*/
public void removeKeyWordBean(KeyWordBean keyWordBean){
mDaoSession.getKeyWordBeanDao().deleteByKey(keyWordBean.getId());
}
/**
* 查询
* @return
*/
public List<KeyWordBean> queryKeyWordBeans(){
return mDaoSession.getKeyWordBeanDao().queryBuilder().build().list();
}
}
- 数据库统一操作管理类初始化(Application)
GreenDaoDataManager.init(this)
- 增删改查
//增,改
var keyWordBean=KeyWordBean()
keyWordBean.keyword="关键词"
GreenDaoDataManager.getInstance().insertKeyWordBean(keyWordBean)
//删
GreenDaoDataManager.getInstance().removeKeyWordBean(keyWordBean)
//查
var queryKeyWordBeans = GreenDaoDataManager.getInstance().queryKeyWordBeans()