关于greendao

greendao官网 GitHub greenDao是一个将对象映射到SQLite数据库中的轻量且快速的ORM解决方案。


db相关的packageclass

配置

app的build.gradle中

  • apply plugin: 'org.greenrobot.greendao' // apply plugin
  •   greendao{      //指定数据库schema版本号,迁移等操作会用到;      schemaVersion 1      //通过gradle插件生成的数据库相关文件的包名,默认为你的entity所在的包名;      daoPackage 'com.hyzlseries.march.claimupload.db.dao'      //自定义生成数据库文件的目录,可以将生成的文件放到我们的java目录中,而不是build中,这样就不用额外的设置资源目录了。      targetGenDir 'src/main/java'  }复制代码
  • compile 'org.greenrobot:greendao:3.2.2' // add library

project的build.gradle中

  • classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin

存储EntityA类型的数据 Entity申明

  • 服务器返回的数据
`{"Rows": 0,"Results": [{"ScanTime": "2017-10-16","InsuredID": 3521,"AccountName": "李海玲","IDCardNo": "420106197412240849","InsClaimCaseID": "RSFJXYYHY171016010001","ReceiptNumber": 1,"ImgNumber": 2,"ClaimCaseState": 14,"ClaimCaseStateName": null,"Memo": null,"InsCompanyID": 1,"InsCompanyName": "中国人民人寿保险股份有限公司福建省分公司","InsCompanyCode": "RSFJ","CompanyID": 1,"CompanyName": "兴业银行股份有限公司","CompanyCode": "XYYH","APPReceiptList": [{"ReceiptID": 849,"ReceiptNo": "0124","ReceitpTime": null,"ImagePath": "/中国人民人寿保险股份有限公司福建省分公司/20171016/oth/RSFJXYYHY171016/201710161558504500385.jpg","ReceiptType": 1,"ReceiptTypeName": "发票","InsClaimCaseID": "RSFJXYYHY171016010001","Operator": 0},{"ReceiptID": 1383,"ReceiptNo": "资料","ReceitpTime": null,"ImagePath": "/中国人民人寿保险股份有限公司福建省分公司/20171016/rec/RSFJXYYHY171016/201710161555539199416.jpg","ReceiptType": 2,"ReceiptTypeName": "非发票","InsClaimCaseID": "RSFJXYYHY171016010001","Operator": 0}]}],"Total": 1,"Code": "0000","Message": "查询成功"
}
复制代码
  • Entity申明
@Entity
public class ScanDetailModel {//不能用int  GreenDao的主键必须设置成包装类 Long , 大写L  参考:http://blog.csdn.net/sunsteam/article/details/52634945@Id(autoincrement = true)private Long id;@Uniqueprivate String InsClaimCaseID;private String AccountName;private String IDCardNo;private int ReceiptNumber;private String ScanTime;private int InsuredID;private int ImgNumber;private String Memo;private String InsCompanyID;private String InsCompanyCode;private String InsCompanyName;private int CompanyID;private int ClaimCaseState;private String CompanyCode;private String CompanyName;@Convert(/**指定转换器 **/converter = ModelConverent2String.class,/**指定数据库中的列字段**/columnType = String.class)private List<ReceiptModel> APPReceiptList;//案件发票集合...
}
复制代码

如上在申明EntityAList<EntityB>属性的时候,需要指定转换器,即添加@Convert()注解。

ModelConverent2String

/*** =============================================* 作    者:Junl(袁军亮)* 版    本:1.0* 描    述:主要是通过greenDao 提供的PropertyConverter,gson,转换对象到字符串存到数据库。* 参    考:http://blog.csdn.net/zhangle1hao/article/details/71412999  http://blog.csdn.net/zxm317122667/article/details/73528387* 创建日期:2017/11/9* 人生如诗:人生若只如初见,何事秋风悲画扇。* =============================================*/public class ModelConverent2String implements PropertyConverter<List<ReceiptModel>, String> {@Overridepublic List<ReceiptModel> convertToEntityProperty(String databaseValue) {Type type = new TypeToken<ArrayList<ReceiptModel>>() {}.getType();ArrayList<ReceiptModel> itemList = new Gson().fromJson(databaseValue, type);return itemList;}@Overridepublic String convertToDatabaseValue(List<ReceiptModel> entityProperty) {String dbString = new Gson().toJson(entityProperty);return dbString;}
}
复制代码

增删改查

/*** =============================================* 作    者:Junl(袁军亮)* 版    本:1.0* 描    述:数据库增删改查* <p>* 创建日期:2017/11/9* 人生如诗:人生若只如初见,何事秋风悲画扇。* =============================================*/public class ScanDetailDaoUtil {private static final String TAG = ScanDetailDaoUtil.class.getSimpleName();public ScanDetailDaoUtil() {}/*** 新增数据*/public static boolean insert(ScanDetailModel model) {try {boolean flag;flag = App.getDaoSession().getScanDetailModelDao().insert(model) == -1 ? false : true;return flag;} catch (Exception e) {e.printStackTrace();}return false;}/*** 查询* @param InsClaimCaseID* @return*/public static ScanDetailModel query(String InsClaimCaseID) {try {ScanDetailModel model = App.getDaoSession().getScanDetailModelDao().queryBuilder().where(ScanDetailModelDao.Properties.InsClaimCaseID.eq(InsClaimCaseID)).unique();return model;} catch (Exception e) {e.printStackTrace();}return null;}/*** @param InsClaimCaseID  案件号* @param position 要删除的位置* @return** 删除思路:查询到ModelB ---> 删除position对应的ModelA--->update*/public static boolean delete(String InsClaimCaseID , int position) {try {if (!JudgeNullUtil.iStr(InsClaimCaseID))return false;ScanDetailModel model = App.getDaoSession().getScanDetailModelDao().queryBuilder().where(ScanDetailModelDao.Properties.InsClaimCaseID.eq(InsClaimCaseID)).build().unique();if (model != null) {List<ReceiptModel> receiptList = model.getAPPReceiptList();if (JudgeNullUtil.iList(receiptList)) {receiptList.remove(position);//update(InsClaimCaseID,model);}return true;}return false;} catch (Exception e) {e.printStackTrace();}return false;}/*** 解决bug:Cannot update entity without key - was it inserted before?* blog.csdn.net/plmmmmlq/article/details/50404495* @param shop*/public static void update(String InsClaimCaseID ,ScanDetailModel shop) {try {List<ScanDetailModel> list = App.getDaoSession().getScanDetailModelDao().queryBuilder().where(ScanDetailModelDao.Properties.InsClaimCaseID.eq(InsClaimCaseID)).build().list();ScanDetailModel model = list.get(0);shop.setId(model.getId());App.getDaoSession().getScanDetailModelDao().update(shop);} catch (Exception e) {e.printStackTrace();}}
}
复制代码

碰到的问题

  • 如何操作List<EntityB>EntityB的某一个属性,如ReceiptModel类中ReceiptNo属性更改。 解决方案: updateupdate不起作用 ,可以query先拿到Entity属性值,设置完毕后再update

转载于:https://juejin.im/post/5a333430f265da43062acec3

greenDao3 0使用小结相关推荐

  1. EJB3.0 注释小结

    EJB3 就靠注释吃饭了,总结一下以备后查. @Id 显示声明属性为标识符 @GeneratedValue(strategy=GenerationType.IDENTITY) 表示主键是自动生成策略, ...

  2. GreenDao2.2升级GreenDao3.0的适配之路

    前言.为什么要升级到Greendao3.0? 1. 多人开发 以往的数据库建表建Dao等操作要新开一个module,在统一的地方管理数据库建表,现在可以直接写Entity.多人开发时自己管自己的Ent ...

  3. GreenDao3.0新特性解析(配置、注解、加密)

    Greendao3.0release与7月6日发布,其中最主要的三大改变就是:1.换包名 2.实体注解 3.加密支持的优化 本文里面会遇到一些代码示例,就摘了官方文档和demo里的例子了,因为他们的例 ...

  4. GreenDao3.0 使用(包括导入,具体方法,基本使用,加密,数据库升级等)

    关于GreenDao greenDao是一个将对象映射到SQLite数据库中的轻量且快速的ORM解决方案.关于greenDAO的概念可以看官网greenDAO greenDAO 优势 1.一个精简的库 ...

  5. C语言中do...while(0)用法小结

    在linux内核代码中,经常看到do...while(0)的宏,do...while(0)有很多作用,下面举出几个: 本文地址:http://www.cnblogs.com/archimedes/p/ ...

  6. VC6.0 使用小结--让开发更加快捷的vc插件

    1.VC6.0显示行号的插件 VC 6.0 没有显示行号的功能, 这个插件可以帮助显示行号, 效果不错 VC显示行号插件说明 ------------------------------------- ...

  7. greendao3.0版本更新 新增字段遇到的问题

    问题描述 前段时间在公司有项目需要更新版本.在新增的功能需求里,需要对greendao里的Entity实体类新增一个字段. 最开始觉得只需要新增一个对象后,在gradle中修改greendao版本号之 ...

  8. html6.0腾讯,腾讯CDC:QQ电脑管家6.0项目小结

    通过分析用户对各类图片的视觉偏好,得出了每类用户的代表图片及关键标签. 进一步分析用户对管家及偏好图片的认知和评价后,提取出视觉定位关键词. 最后,设计师分别从用户和专业角度上做了视觉定位分析. 经过 ...

  9. GreenDao3.0+库,轻松搞定安卓数据库操作

    GreenDao是安卓的数据库操作库,它实现了ORM,ORM称为:对象关系映射 我把它简单的理解为用对象来操作数据库 比如我需要创建一个User名字的数据库表,我可以直接定义一个User类,里面加上俩 ...

最新文章

  1. 为什么7层负载均衡压测性能低
  2. spring的基本配置和使用
  3. pmbok第七版_PMBOK第七版要来了!都有哪些变化?你准备好了么?
  4. ReportViewer教程(6)-将报表浏览器与报表联系
  5. 怎么看服务器连接记录_企业微信怎么查看打卡记录?自己和他人的都可以看
  6. django中自定义了manager函数,使用的时候报错AttributeError: 'Manager' object has no attribute 'title_count'...
  7. Ayoa:让思维导图更简单,在线使用 无需安装客户端
  8. wxPython练习
  9. 虎牙代理php,huya虎牙PHP
  10. linux安装文件的后缀,Linux下各种后缀名文件安装
  11. 人工智能一种现代化学习方法——学习笔记(13章)
  12. 360极速浏览器调用selenium
  13. 轻松查询多个中通速递发出物流中含有某个城市的单号
  14. 【数据库】数据分析专项练习题库-SQL试卷一
  15. Springcloug入门
  16. python系列3(list tupe dict )
  17. 2021_SIGIR_Social Recommendation with Implicit Social Influence
  18. Hadoop作业提交分析(五)
  19. 企微管家营销红包:给客户发红包,给客户群发红包均支持
  20. 个人作业2——NBA 2k18案例分析

热门文章

  1. [猿来小课]Python开发入门第三讲:Python的安装
  2. 用lisp语言写一段cad提取坐标代码
  3. 河南在中国数学类学会的人员分布
  4. 利用手机实现计算机无线上网的设置过程,win10系统使用点对点无线网络实现手机共享上网的具体方案...
  5. Linux9.23.1
  6. c语言:求二元一次方程根的所有情况
  7. 密码正确登入不了网络计算机,电脑突然断网,然后重启输入密码就登陆不了电脑为什么?老是显示当前电脑时间与网络时间不一致...
  8. 前端面试笔试错题指南(四)
  9. HSWMS——库存管理
  10. PEP 634 – Structural Pattern Matching: Specification