参考

官方文档

Github

一.准备工作

在工程的build.gradle文件中添加

 repositories {...mavenCentral()}dependencies {...classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0' }

在项目的build.gradle文件中添加

apply plugin: 'org.greenrobot.greendao'
android {...greendao {schemaVersion 1daoPackage 'com.greendao.database.dao'targetGenDir 'src/main/java'}
}

(1)schemaVersion:指定数据库schema版本号,迁移等操作会用到;
(2)daoPackage:通过gradle插件生成的数据库相关文件的包名,默认为你的entity所在的包名;
(3)targetGenDir:自定义生成数据库文件的目录,可以将生成的文件放到我们的java目录中,而不是build中,这样就不用额外的设置资源目录了。

dependencies {...implementation 'org.greenrobot:greendao:3.3.0'
}

(1)当Bean类对象发生改变时,schemaVersion的数值要增加。
(2)目前引用的版本是最新版,后续更新要注意上方的参考文档。
(3)如果是在libiray中使用,implementation 一定要换成api

二. 创建实体类

例:

@Entity
public class TestUser {@Id(autoincrement = true)private Long id;@NotNullprivate String name;@NotNullprivate int age;@NotNullprivate String sex;@Index(unique = true)private String uid;
}

主键一定要大写的Long。
点击Build → Make Project会自动生成代码。

@Entity
public class TestUser {@Id(autoincrement = true)private Long id;@NotNullprivate String name;@NotNullprivate int age;@NotNullprivate String sex;@Index(unique = true)private String uid;@Generated(hash = 1872927493)public TestUser(Long id, @NotNull String name, int age, @NotNull String sex,String uid) {this.id = id;this.name = name;this.age = age;this.sex = sex;this.uid = uid;}@Generated(hash = 925009630)public TestUser() {}public Long getId() {return this.id;}public void setId(Long id) {this.id = id;}public String getName() {return this.name;}public void setName(String name) {this.name = name;}public int getAge() {return this.age;}public void setAge(int age) {this.age = age;}public String getSex() {return this.sex;}public void setSex(String sex) {this.sex = sex;}public String getUid() {return this.uid;}public void setUid(String uid) {this.uid = uid;}
}

这个类要用到很多的注解,我也简单的整理了一下。

注解 参数 解释
@Entity @Entity注释标记的Java类作为greenDAO一个presistable实体。
@Id autoincrement 主键,参数autoincrement 是使ID值不断增加(不重用旧值)的标志,必须是long或Long属性作为其主键。
@NotNull 表明值不能为空
@Index unique 在属性上使用@Index为相应的数据库列创建数据库索引,unique =true表明强制所有值都是唯一的

注解就先整理这些,具体可以在使用时有目的的查询或参考官方文档。

三.初始化

可以将初始化以及增删改查进行封装,在初始化时需要context而且只需要初始化一次,为防止内存泄露所以我们将初始化放在Application进行操作。

public class GreenDaoManager {private static GreenDaoManager greenDaoManager;private DaoMaster daoMaster;private DaoSession daoSession;private Context context;private DaoMaster.DevOpenHelper helper;/*** 私有化*/private GreenDaoManager() {}/*** 对外暴露的获取方法** @return 单例对象*/public static GreenDaoManager getInstance() {if (null == greenDaoManager) {synchronized (GreenDaoManager.class) {if (null == greenDaoManager) {greenDaoManager = new GreenDaoManager();}}}return greenDaoManager;}/*** 初始化** @param context 上下文*/public void init(Context context) {this.context = context;}/*** 获取管理特定架构的所有可用DAO对象** @return daoSession*/public DaoSession getDaoSession() {if (daoSession == null) {if (daoMaster == null) {daoMaster = getDaoMaster();}daoSession = daoMaster.newSession();}daoSession.clear();return daoSession;}/*** 是否打印 数据库的日志信息 默认不开启*/public void setDebug(Boolean isDebug) {QueryBuilder.LOG_SQL = isDebug;QueryBuilder.LOG_VALUES = isDebug;}/*** 关闭所有的操作 数据库用完的时候必须关闭 节省资源*/public void closeConnection() {closeHelper();closeSession();}/*** 判断是否存在数据库,如果没有则创建数据库** @return DaoMaster*/private DaoMaster getDaoMaster() {if (null == daoMaster) {helper = new DaoMaster.DevOpenHelper(context, "test-db", null);SQLiteDatabase db = helper.getWritableDatabase();daoMaster = new DaoMaster(db);}return daoMaster;}/*** 关闭 help*/private void closeHelper() {if (helper != null) {helper.close();helper = null;}}/*** 关闭 会话*/private void closeSession() {if (daoSession != null) {daoSession.clear();daoSession = null;}}
}

这里面用到了单例模式,可以参考我之前的博客。

应用最广的模式-单例模式

Android GreenDao框架使用 基础篇相关推荐

  1. 极光小课堂 | 极光推送之 Android 客户端使用指南——基础篇

    " 本文中涉及到的所有代码现已在 Github 上开源,地址:https://github.com/xuexiangjys/JPushSample" 01 前言 - 极光推送是国内 ...

  2. android 基础应用程序,android应用程序基本实现(基础篇).ppt

    <android应用程序基本实现(基础篇).ppt>由会员分享,可在线阅读,更多相关<android应用程序基本实现(基础篇).ppt(22页珍藏版)>请在人人文库网上搜索. ...

  3. ym—— Android网络框架Volley(终极篇)

    转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103).谢谢支持! 没看使用过Volley的同学能够,先看看 Android网络框架Volley(体验篇) ...

  4. 深入了解Android蓝牙Bluetooth——《基础篇》

    深入了解Android蓝牙Bluetooth--<基础篇> 什么是蓝牙?   也可以说是蓝牙技术.所谓蓝牙(Bluetooth)技术,实际上是一种短距离无线电技术,是由爱立信公司公司发明的 ...

  5. Android开源框架Afinal第一篇——揭开圣女的面纱

    Android开源框架Afinal第一篇--揭开圣女的面纱 分类: Android开源框架哪点事2013-09-02 14:25 260人阅读 评论(0) 收藏 举报 Afinal 这是Afinal在 ...

  6. Android面试题Java基础篇

    Android面试题Java基础篇,由本人整理汇总,后续将继续推出系列篇,如果喜欢请持续关注和推荐,更多精彩内容可以关注微信公众号(Android高级编程):android-tech 系列文章目录: ...

  7. Android DRM框架与基础知识

    Android DRM框架与基础知识 Android DRM框架 DRM框架的目的:能让安卓设备可以播放更多的内容,不同的内容和硬件设备可能使用的是不同的内容版权保护机制或者没有版权管理机制,但是安卓 ...

  8. Android单元测试框架介绍 -- 调研篇

    查阅了关于Android单元测试的一些资料后,发现网上对于现有的单元测试框架说法褒贬不一,各有优缺点,在框架的选择上也是需要很多因素来决定,因此我总结了一下最近的调研,对现有的单元测试框架做下简单介绍 ...

  9. Android自定义控件系列之基础篇

    一.概述 在android开发中很多UI控件往往需要进行定制以满足应用的需要或达到更加的效果,接下来就通过一个系列来介绍自定义控件,这里更多是通过一些案例逐步去学习,本系列有一些典型的应用,掌握好了大 ...

最新文章

  1. 运维经验分享:关于系统运维监控的几点建议
  2. python导入本地文件-Python使用import导入本地脚本及导入模块的技巧总结
  3. cnblog项目--20190309
  4. 数据中台建设与应用_Gartner对于建设数据中台的建议
  5. 1g等于多少mb计算机网络,手机流量1G等于多少MB ,如何产生,怎么节省
  6. python断点续传下载_python requests 断点续传下载
  7. Hadoop 回收站
  8. [转载] python基础 - namedtuple和enum
  9. spring boot demo(spring jdbc访问数据)
  10. 十大 Node.js 的 Web 框架,快速提升工作效率
  11. 夜,思考——我想要的到底是什么?
  12. 使用github下载项目压缩包,打开前端项目加载依赖报错。
  13. 快手:星星之火,寒冬燎原
  14. iPhone投屏家中设备有哪些方法 iPhone投屏失败是怎么回事如何解决
  15. TSE2019-The Art, Science, and Engineering of Fuzzing: A Survey
  16. 眼球追踪技术 Unity+ HTC vive Pro + DroolonF1 (三)
  17. 什么时候不要采用微服务架构
  18. 计算机与昆虫关系的论文,趣味昆虫学论文 昆虫与人类的关系
  19. 在CMD中输入adb命令,提示“‘adb‘ 不是内部或外部命令,也不是可运行程序或批处理文件”的解决方法
  20. 【qt开发】qt了解

热门文章

  1. 常见的时间序列预测模型python实战汇总
  2. Gatling:HTTP Protocol
  3. Kathy老师讲述的有趣科学历史
  4. pc win端桌面级视频播放器 +electron+vue+element
  5. python笔记系列:IP地址处理模块IPy
  6. 周笔畅白裙搭高跟鞋淑女范 自称不适应
  7. 【毕业设计系列】图像描述方法的实现matlab GUI【含Matlab源码】
  8. win10 64位下载64位python
  9. cmake gui安装教程_CMake安装使用教程
  10. android倒计时