GreenDao的初步探索
开发环境:AS3.1.4,GreenDao3.2.2
1,配置
项目的build.gradle中,
dependencies {
classpath 'com.android.tools.build:gradle:3.1.4'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
}
module的build.gradle中,
apply plugin:'com.android.application'
apply plugin:'org.greenrobot.greendao'
greendao {
schemaVersion 1 //数据库版本号
daoPackage'com.example.mytest.gen' //数据库包名
targetGenDir'src/main/java' //数据库目录
}
implementation 'org.greenrobot:greendao:3.2.2'
2,创建User类
新建一个User类
@Entity
public class User {
@Id
private Long id;
private String name;
}
@Entity:被Entry注解的JavaBean才能被GreenDao操控。
@ID:相当于主键,最好用long型。
Build后,在上面填写的gen目录下就有了三个文件夹。
3,创建数据库管理类
public class DaoManager {
private static final String DB_NAME = "db_test";
private static final String TAG = DaoManager.class.getSimpleName();
private static volatile DaoManager daoManager; //多线程 使用单例模式
private static DaoMaster daoMaster;
private static DaoSession daoSession;
private static DaoMaster.DevOpenHelper helper;
private Context context;
private static final DaoManager instance = new DaoManager();
/*
* 构造方法* */
public DaoManager() {
}
/*
* 使用单例模式 保证数据库的安全* */
public static DaoManager getInstance() {
return instance;
}
/*
* 初始化daomanager
* */
public void init(Context context) {
this.context = context;
}
/**
* 判断是否存在数据库,如果没有则创建数据库
*
* @return
*/
public DaoMaster getDaoMaster() {
if (daoMaster == null) {
helper = new DaoMaster.DevOpenHelper(context, DB_NAME, null);
daoMaster = new DaoMaster(helper.getWritableDatabase());
}
return daoMaster;
}
/**
* 完成对数据库的添加 修改 查询 的操作 仅仅是一个接口
*
* @return
*/
public DaoSession getDaoSession() {
if (daoSession == null) {
if (daoMaster == null) {
daoMaster = getDaoMaster();
}
daoSession = daoMaster.newSession();
}
return daoSession;
}
/*
* 是否打印 数据库的日志信息 默认不开启* */
public void setDebug(Boolean isDebug) {
if (isDebug) {
QueryBuilder.LOG_SQL = true;
QueryBuilder.LOG_VALUES = true;
} else {
QueryBuilder.LOG_SQL = true;
QueryBuilder.LOG_VALUES = true;
}
}
/*
* 关闭help
* */
public void closeHelper() {
if (helper != null) {
helper.close();
helper = null;
}
}
/*
* 关闭 会话* */
public void closeSession() {
if (daoSession != null) {
daoSession.clear();
daoSession = null;
}
}
/*
* 关闭所有的操作 数据库用完的时候必须关闭 节省资源*/
public void closeConnection() {
closeHelper();
closeSession();
}
}
4,增删改查
UserDao userDao = DaoManager.getInstance().getDaoSession().getUserDao();
插入:
userDao.insert(u);
userDao.insertOrReplace(u);
批量插入:
List list_u = new ArrayList<>();
userDao.insertInTx(list_u);
更新:
userDao.update(u);
批量更新:
userDao.updateInTx(list_u);
删除:
userDao.deleteByKey("2");
userDao.delete(u);
删除所有:
userDao.deleteAll();
查询ID=1的数据:
QueryBuilder userQueryBuilder = userDao.queryBuilder();
List list = userQueryBuilder.where(UserDao.Properties.Id.eq("1")).list();
查询全部:
List users= userDao.loadAll();
//ID等于1并且name是张三的对象
User unique = userQueryBuilder.where(Properties.Id.eq(1)).where(Properties.Name.eq("zhangsan")).build().unique();
User zhangsan = userQueryBuilder.where(Properties.Id.eq(1), Properties.Name.eq("zhangsan")).build().unique();
//ID大于10的数据的个数
long count = userQueryBuilder.where(Properties.Id.ge(10)).buildCount().count();
//ID小于9的数据
List list_low9 = userQueryBuilder.where(Properties.Id.le(9)).build().list();
//ID在1-13之间,取5条数据
userQueryBuilder.where(Properties.Id.between(1, 13)).limit(5).build().list();