ORM对象关系映射之GreenDAO高级用法
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();
ORM对象关系映射之GreenDAO高级用法的更多相关文章
- ORM对象关系映射之GreenDAO源码解析
上一篇我们学习了GreenDAO的CRUD基本操作,可以说是非常的方便的,而且GreenDAO的效率和性能远远高于其它两款流行的ORM框架,下面是我从官网找的一副它们三个ORM框架之间的性能测试的直观 ...
- ORM对象关系映射之GreenDAO建立多表关联
利用GreenDAO可以非常方便的建立多张表之间的关联 一对一关联 通常我们在操作数据库的时候,我们往往不是单独的对一张表进行操作,而是对这张表的操作会联动的影响另外一张表或者多张表,比如:现在有两张 ...
- Android ORM对象关系映射之GreenDAO建立多表关联
https://blog.csdn.net/u010687392/article/details/48496299 利用GreenDAO可以非常方便的建立多张表之间的关联 一对一关联 通常我们在操作数 ...
- ORM对象关系映射之GreenDAO自定义属性转换器PropertyConverter
在使用GreenDAO定义实体的属性时候,通常来说定义的实体属性名就是对应的表的字段名.实体中属性的类型(如Long.String等)就是表的字段名类型,但是我们难免会有不一样的需求,比如实体中我定义 ...
- ORM 对象关系映射
ORM (object relation mapping) 就是将对象数据转换为sql语句并执行 对象关系映射框架 orm 需要做的事情 1 生成创建表的语句 2 插入数据的语句 3 删除数据的语句 ...
- Django---静态文件配置,post提交表单的csrf问题(日后细说),创建app子项目和分析其目录,ORM对象关系映射简介,Django操作orm(重点)
Django---静态文件配置,post提交表单的csrf问题(日后细说),创建app子项目和分析其目录,ORM对象关系映射简介,Django操作orm(重点) 一丶Django的静态文件配置 #we ...
- Php ORM 对象关系映射
ORM的全称是Object Relational Mapping,即对象关系映射.它的实质就是将关系数据(库)中的业务数据用对象的形式表示出来,并通过面向对象(Object-Oriented)的方式将 ...
- $Django setting.py配置 ,GET、POST深入理解,三件套,orm对象关系映射简介
1 django中app的概念: 大学:----------------- 项目 信息学院 ----------app01 物理学院-----------app02 ****强调***:创建的每一 ...
- ORM对象关系映射
ORM 总结: ORM:对象关系映射 作用: 1.将定义数据库模型类--> 数据库表 2.将定义数据库模型类中的属性--->数据库表字段 3.将模型对象的操作(add,delete,com ...
随机推荐
- 深入Java虚拟机(1)——Java体系结构
Java体系结构 Java体系结构包括四个独立但相关的技术: 1.Java程序设计语言 2.Java class文件格式 3.Java应用编程接口(API) 4.Java虚拟机 当编写并运行一个Jav ...
- WCF Restful调用跨域解决方案
目前很多项目中CRM更多扮演一个纯后台管理系统,用户更多的操作是在移动端执行,不管是安卓还是IOS甚至是H5.这里以H5为例,CRM提供数据接口,移动web端来调用接口进行数据处理,这里就会涉及到一个 ...
- OpenCV, MatBGR2ARGB, ARGB2MatBGR
代码片段~ unsigned int* abMatBGR2ARGB(Mat imag) { int nCols; int nRows; unsigned int *pbuff = NULL; if(i ...
- Unity UGUI图文混排源码(四) -- 聊天气泡
这里有同学建议在做聊天气泡时,可以更改为一张图集对应多个Text,这样能节省资源,不过我突然想到每个Text一个图集,可以随时更换图集,这样表情图更丰富一些,于是我就先将现有的聊天demo改为了聊天气 ...
- linux中exec和xargs命令的区别和优劣分析
find的exec及ok命令 exec命令的格式为: exec command {} \; exec后面跟着的是操作命令,然后跟着{}表示每一个参数,然后空格,然后"\;".{}之 ...
- 【Android 系统开发】使用 Source InSight 阅读 Android 源码
1. 安装 Source Insight (1) Source Insight 相关资源 安装相关资源 : -- 下载地址 : http://www.sourceinsight.com/down35. ...
- 第一行代码阅读笔记---AndroidMainfest.xml分析
按照这本书的指引,我随作者一样创建了一个安卓应用,开始了安卓开发的启程. 找到AndroidMainfest.xml这个文件,打开后看到了我创建的Activity在这个文件里被成功注册,文件内容如下: ...
- 在Debian/Ubuntu系统中安装*.sh与*.bin文件
在Debian/Ubuntu系统中安装*.sh与*.bin文件的基本方法.一,安装*.sh文件运行命令行至文件目录下,执行:sudo sh *.sh直接运行在命令行中执行:sudo chmod +x ...
- Xcode中为何要为设置bundle和App分别设置两份一样的图片资源
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们知道在App设置的bundle中有时也会用到图片资源,而在 ...
- 深入理解Express.js
转自:http://xvfeng.me/posts/understanding-expressjs/ 英文原文更赞:http://evanhahn.com/understanding-express- ...