前言
总所周知,GreenDAO这个数据库框架在Android中是非常出名的,是基于sqlite进行封装的,GreenDAO是一个对象关系映射(ORM)的框架,能够提供一个接口通过操作对象的方式去操作关系型数据库,让操作数据库时更简单、更方便。
GreenDao对外提供的核心类有:
DaoMaster:DaoMaster保存数据库对象(SQLiteDatabase)并管理特定模式的Dao类。它具有静态方法来创建表或将他们删除。其内部类OpenHelper和DevOpenHelper是在SQLite数据库中创建模式的
SQLiteOpenHelper实现。
DaoSession:管理特定模式的所有可用Dao对象,还为实体提供了一些通用的持久性方法,如插入,加载,更新,刷新和删除。
Dao:数据访问对象(Dao)持续存在并查询实体。对于每个实体,GreenDao生成一个Dao,它比DaoSession有更多的持久化方法。
实体:持久对象,通常实体是使用标准Java属性(如POJO或JavaBean)来表示数据库的对
一、依赖添加
1.project 的 build.gradle
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
2.app的build.gradle或者library中的build.gradle:
apply plugin: 'com.android.library'
apply plugin: 'org.greenrobot.greendao'
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 15
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
greendao {
//数据库版本号,升级时修改
schemaVersion 1
//生成的DAO,DaoMaster和DaoSession的包路径。默认与表实体所在的包路径相同
daoPackage 'greendao.gen'
//生成源文件的路径。默认源文件目录是在build目录中的(build/generated/source/greendao)
targetGenDir 'src/main/java'
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
//数据库加密
implementation 'net.zetetic:android-database-sqlcipher:3.5.7@aar'
/*greenDao数据库*/
implementation 'org.greenrobot:greendao:3.2.2'
/*数据库版本升级*/
implementation 'com.github.yuweiguocn:GreenDaoUpgradeHelper:v2.1.0'
}
二、代码封装
1.定义数据库操作接口,Operation
import java.util.List;
public interface Operation<T, K> {
void insert(T t);
void insertOrReplace(T t);
void insertOrReplaceInTx(Iterable<T> entities);
void deleteByKey(K k);
void delete(T t);
void deleteInTx(Iterable<T> entities);
void deleteAll();
T load(K key);
List<T> loadAll();
}
2.使用基类实现接口,BaseOperation
import org.greenrobot.greendao.AbstractDao;
import java.util.List;
public abstract class BaseOperation<T, K, R extends AbstractDao<T, K>> implements Operation<T, K> {
public abstract R getDao();
@Override
public void insert(T t) {
if (t != null) {
getDao().insert(t);
}
}
@Override
public void insertOrReplace(T t) {
if (t != null) {
getDao().insertOrReplace(t)