GreenDao相关操作

基于Greendao 3.2.0

一、导入
1.在项目build.gradlet的dependencies导入依赖:
classpath ‘org.greenrobot:greendao-gradle-plugin:3.2.0’
2.在module build.gradle 中
apply plugin: ‘org.greenrobot.greendao’
在android块中引入
greendao {
schemaVersion 1
daoPackage ‘XXX’ //存放数据表的包路径
targetGenDir ‘src/main/java’
}
二、初始化数据库
最好放在application的oncreate方法中:
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, “notes-db”);
Database db = helper.getWritableDb();
daoSession = new DaoMaster(db).newSession();
同时声明一个获取DaoSession的方法:
public DaoSession getDaoSession() {//获取dao实例
return daoSession;
}
这样,我们就可以使用:
MyApplication.getInstance().getDaoSession(),获取daosession实例了。
关于DaoMaster、DaoSession
DaoMaster:
daomaster以一定的模式持有数据库对象(SQLiteDatabase)并管理一些DAO类(而不是对象)。有一个静态的方法创建和drop数据库表。它的内部类OpenHelper和DevOpenHelper是SQLiteOpenHelper的实现类,用于创建SQLite数据库的模式。
DaoSession:
管理指定模式下所有可用的DAO对象,你可以通过某个get方法获取到。DaoSession提供一些通用的持久化方法,比如对实体进行插入,加载,更新,刷新和删除。最后DaoSession对象会跟踪identity scope,更多细节,可以参看 session文档
三、建表
无非是新建一个类,ctrl+F9
四、相关操作
在activity中获取实例:
daoSession = EChatApp.getInstance().getDaoSession();
cartoonsDao = daoSession.getCartoonsDao();

1.懒加载
查询某一条数据的时候并不会直接将这条数据以指定对象的形式来返回,而是在你真正需要使用该对象里面的一些属性的时候才会去数据库访问并得到数据。他的好处就是可以减少程序本身因为与数据库频繁的交互造成的处理速度缓慢。
使用:
List resultList=cartoonDao.queryBuilder().listLazy();
五、.查询
懒加载:如上,也可以用list
Iterator遍历:
Iterator list=cartoonDao.queryBuilder().listIterator();
while(list.hasNext()){
Cartoon cartoon=list.next();
}
可以在控制台输出查询语句:
QueryBuilder.LOG_SQL=true;
QueryBuilder.LOG_VALUES=true;(一般放在onCrate中)
六、条件查询
1.Cartoon cartoon=cartoonDao.queryBuilder().where(cartoonDao.Properties.NAME.eqs(“天行九歌”).unique();
2.List list=cartoonDao.queryBuiler().where(cartoonDao.Properties.NAME.like(“天”)).list();
3. List list=cartoonDao.queryBuilder().where(cartoonDao.Properties.AGE.between(10,20)).list();
4. 上面的between,可替换成 lt(小于)、gt(大于)、notEq(不等于)、le(小于等于)、ge(大于等于),当然后面的数据也需要进行相应的修改。
5. 排序:
List list=cartoonDao.queryBuiler().where(cartoonDao.Properties.NAME.like(“天”)).orderAsc(cartoonDao.Properties.AGE).list();
七、源生sql查询
List list=sonDao.queryBuilder().where(new whereCondition.StringCondition(“FATHER_ID IN “+”(SELECT _ID FROM FATHER WHERE AGE>45)”)).list();
八、多线程查询
ex:
private void queryThread(){
Query query=cartoonDao.queryBuilder().build();
new Thread(new Runnable(){
~{
List list=query.forCurrentThread().list();
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值