GreenDao3 数据库
1、优点:
1、性能高
2、内存占用小
3、库文件小,小于100k,编译时间低,可以避免65k方法限制。
4、支持数据库加密
5、简介易用的API,不用拼接SQ语句
3.0改动:
采用注解的方式通过编译方式生成Java数据对象和DAO对象,使用起来方便。
2、项目集成步骤
1、在主项目中build.gradle中dependencies配置如下代码:
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
2、在module中的build.gradle中配置如下代码:
①添加插件代码:
apply plugin: 'org.greenrobot.greendao'
②在android中添加greendao配置如下
greendao {
schemaVersion 4//数据库版本号
daoPackage 'com.overseas.saas.myapplication.db' //存放生成文件的包名
targetGenDir 'src/main/java' //生成文件的路径
}
③添加依赖,代码如下:
implementation 'org.greenrobot:greendao:3.2.2' // add library
implementation 'org.greenrobot:greendao-generator:3.2.2'
3、上述配置完成后在db中编写实体类,点击build-->make project 生成DAO文件。这个时候就会发现db目录下会生成DaoMaster DaoSession 和对应的xxxDao。
3、 DaoMaster、 DaoSession 、xxxDao和Entities各自的作用
1、DaoMaster:
保存数据库对象(SQLiteDatabase)并管理特定模式的DAO类(而不是对象)。它有静态方法来创建表或
删除它们。它的内部类OpenHelper和DevOpenHelper是SQLiteOpenHelper实现,它们在SQLite数据库中
创建模式。
2、DaoSession:
管理特定模式的所有可用DAO对象,您可以使用其中一个getter方法获取该对象。DaoSession还提供了一
些通用的持久性方法,如实体的插入,加载,更新,刷新和删除。
3、xxxDao:
数据访问对象(DAO)持久存在并查询实体。对于每个实体,greenDAO生成DAO。它具有比DaoSession
更多的持久性方法,例如:count,loadAll和insertInTx。
4、Entities:
可持久化对象。通常, 实体对象代表一个数据库行使用标准 Java 属性(如一个POJO 或 JavaBean )
4、封装一个数据库管理者代码如下(这里是根据自己需要自己封装):
public class DBManager {
private DaoMaster.DevOpenHelper openHelper;
private static DBManager dbManager;
private DBManager(Context context){
openHelper= new DaoMaster.DevOpenHelper(context,"search_db",null);
}
public static DBManager getInstance(Context context){
if (dbManager==null){
synchronized (DBManager.class){
dbManager=new DBManager(context);
}
}
return dbManager;
}
/**
* 获取可读数据库
* @return
*/
public SQLiteDatabase getReadableDatabase(){
return openHelper.getReadableDatabase();
}
/**
* 获取可写数据库
* @return
*/
public SQLiteDatabase getWritableDatabase(){
return openHelper.getWritableDatabase();
}
public DaoSession getSession(boolean isWrite){
DaoMaster daoMaster;
if (isWrite){
daoMaster= new DaoMaster(getWritableDatabase());
}else{
daoMaster=new DaoMaster(getReadableDatabase());
}
DaoSession daoSession=daoMaster.newSession();
return daoSession;
}
/**
* 添加一条历史查询记录
* @param entity
*/
public void addSearch(SearchEntity entity){
SearchEntityDao searchEntityDao=getSession(true).getSearchEntityDao();
searchEntityDao.insertOrReplace(entity);
}
/**
* 删除一条历史查询数据
* @param entity
*/
public void deleteSearch(SearchEntity entity){
SearchEntityDao searchEntityDao=getSession(false).getSearchEntityDao();
searchEntityDao.delete(entity);
}
/**
* 降序查询所有历史数据
* @return
*/
public List<SearchEntity> queryAllSearch(){
SearchEntityDao searchEntityDao=getSession(false).getSearchEntityDao();
return searchEntityDao.queryBuilder().orderDesc(SearchEntityDao.Properties.Id).list();
}
/**
* 删除所有的历史查询记录
*/
public void deleteAllSearch(){
SearchEntityDao searchEntityDao=getSession(false).getSearchEntityDao();
searchEntityDao.deleteAll();
}
}
参考的文章
https://www.cnblogs.com/whoislcj/p/5651396.html
https://www.jianshu.com/p/53083f782ea2
网友评论