ORM对象关系映射之GreenDAO高级用法
来源:互联网 发布:java和运维工程师 编辑:程序博客网 时间:2024/05/08 00:51
CRUD
增加:
dao.insert(Student entity);//添加一个dao.insertInTx(Student... entity);//批量添加
删除:
dao.deleteByKey(Long key);//根据主键删除dao.deleteByKeyInTx(Long... keys);//批量删除dao.delete(Student entity);//根据实体删除dao.deleteInTx(Student... entities);//批量删除dao.deleteAll();//全部删除
修改:
dao.update(Student entity);//根据实体更新dao.updateInTx(Student... entities);//批量更新
查找:
Query<Student> query = dao.queryBuilder().where(StudentDao.Properties.Name.eq(content)).build();List<Student> list = query.list();//或者利用sql语言查询Query query = dao.queryBuilder().where( new StringCondition("_ID IN " + "(SELECT _ID FROM STUDENT WHERE AGE = 20)").build()
创建属性约束
我们可以在为Schema添加实体的时候,在实体添加属性时候进行属性的一些约束,如:
Schema schema = new Schema(1,"com.sunzxyong.greendao");Entity entity = schema.addEntity("Student");entity.addIdProperty().autoincrement().primaryKey();entity.addStringProperty("name").notNull();entity.addIntProperty("age");entity.addBooleanProperty("is_man").notNull();new DaoGenerator().generateAll(schema,"../GreenDAODemo/app/src/main/java-gen");
实体类的继承、接口、序列化
entity.implementsSerializable();//实现序列化entity.implementsInterface("com.sunzxyong.A");//实现A接口entity.setSuperclass("com.sunzxyong.B");//继承B类entity.addImport("com.sunzxyong.C");//导包
保持实体中自定义的代码不会被覆盖
假如你需要在实体类中自定义一些字段变量和方法,而再次generator的实体类通常会覆盖以前的,如果你不想覆盖掉你自定义的代码,可以这样设置:
schema.enableKeepSectionsByDefault();//通过次Schema对象添加的所有实体都不会覆盖自定义的代码//或者entity.setHasKeepSections(true);//单独让某个实体不覆盖自定义的代码
如果设置了上述代码,则生成的实体中会多出以下代码:
// KEEP INCLUDES - put your custom includes here 在这里添加引入// KEEP INCLUDES END // KEEP FIELDS - put your custom fields here 在这里添加字段变量// KEEP FIELDS END // KEEP METHODS - put your custom methods here 在这里添加方法// KEEP METHODS END
【注意】:添加的自定义代码只能在我用文字标注的地方添加,否则超过次区域的GreenDAO生成实体时将会覆盖
多线程环境下使用GreenDAO
在多线程的环境下使用查询,你必须调用query的 forCurrentThread()为当前的线程获得一个query实例,如:
Query<Student> query = dao.queryBuilder().where(StudentDao.Properties.Name.eq(content)).build().forCurrentThread();List<Student> list = query.list();
LazyList和List
在通过queryBuilder建立查询时候:
1、如果你想得到一个唯一的结果,可以调用Query的unique()方法,如:
Query<Student> query = dao.queryBuilder().where(StudentDao.Properties.Name.eq(content)).build().forCurrentThread();Student student = query.unique();
2、如果你想得到多个结果,可以调用Query的list()或者listLazy()方法,这两个方法有什么区别呢?
- List - 当所有的实体查询完会立即一次性加载到内存中,即在List集合中
- LazyList - 懒加载的方式,即实体按照需求加载进入内存(查询完不会立即加载到内存中,只有在需要数据的时候也就是遍历这个LazyList的时候,才会加载到内存中),列表中的元素在第一次访问时候就会同时缓存在一个ArrayList集合中,它再次访问这些元素则直接从集合中拿。如果你不想缓存这些数据又想懒加载,可以通过Query的listLazyUncached()方法。这个集合在使用完毕必须close,即调用:listLazy.close();
GreenDao的代码混淆配置
-keepclassmembers class * extends de.greenrobot.dao.AbstractDao { public static java.lang.String TABLENAME;}-keep class **$Properties
借助两个Flag打印出SQL命令和传入的值
通过设置这两个Flag,可以在控制台中打印出我们执行的sql语句以及传入的值,方便用于检查
//下面两个Flag的设置可以在控制台中打印出此次查询的sql语句和value值QueryBuilder.LOG_SQL = true;QueryBuilder.LOG_VALUES = true;Query<Student> query = dao.queryBuilder().where(StudentDao.Properties.Name.eq(content)).build().forCurrentThread();LazyList<Student> list = query.listLazyUncached();
2 1
- ORM对象关系映射之GreenDAO高级用法
- ORM对象关系映射之使用GreenDAO进行CRUD操作
- ORM对象关系映射之GreenDAO源码解析
- ORM对象关系映射之GreenDAO建立多表关联
- ORM对象关系映射之GreenDAO自定义属性转换器PropertyConverter
- ORM对象关系映射之使用GreenDAO进行CRUD操作
- ORM对象关系映射之GreenDAO建立多表关联
- android中ORM(对象关系映射)数据库greenDAO的使用
- Android ORM系列之GreenDao关联关系映射
- Android ORM系列之GreenDao关联关系映射
- ORM 对象关系映射
- ORM 对象关系映射
- ORM对象关系映射
- 对象关系映射ORM?
- ORM-对象关系映射
- ORM对象/关系映射
- ORM:对象关系映射
- Hibernate ORM 对象-关系 映射
- 互联网金融风生水起,伊斯兰金融要登台了?
- idea在WEB-INF下建立lib目录导入jar包
- 杰出人士的七种共性之2-独善其身
- AndroidSDK环境配置
- NGUI使用图片制作文字
- ORM对象关系映射之GreenDAO高级用法
- 【回文串】Codeforces 17E Palisection
- Linux——Samba安装和配置
- shared_ptr之多线程
- 项目管理软件Redmine安装及SVN配置
- rails网站分享到朋友圈功能是怎么实现的
- ubuntu 使用terminator作为终端使用solarized配色
- OC学习笔记
- winscp 上传文件发生错误码 4的问题