Android ORM框架GreenDao用法

0 简介

android 上的ORM框架主要有两个:ormlite 和 GreenDAO,本篇主要介绍GreenDao的用法,原因是GreenDAO的速度快,关于ormlite和GreenDao的性能对比,请看这篇文章:[http://www.open-open.com/lib/view/open1438065400878.html][1]
GreenDao的Github地址: [https://github.com/greenrobot/greenDAO][2]

1 原理

GreenDAO之所以比ormlite快,是因为ormlite采用注解和反射,greenDao采用预先生成好的Java类,一般用了反射速度就会慢,但是greenDao的缺点就是没有ormlite易用,ormlite上手更快,更灵活。GreenDao实际上是用一些比封装的比较完善的类,就像Android提供的OpenHelper一样的,但是由于每个人的表结构都不一样,所以这些类必须动态生成,但是我们无法写出这些类,因此作者就创建了一个模板这个模板就是DaoGenerator,这是一个java工程,在使用之前必须先搭建这个工程,然后生成DaoMaster等类,然后就能大显身手了。
总结一下,使用GreenDao分三步

  • 创建Java工程Daogenerator
  • 生成DaoMaster、DaoSession、表对应实体类
  • 使用生成的类方便的操作数据库

2 创建Java工程

(1) 在AndroidStudio中创建新的module,点击Fiel–>new module–>选择Java Libary

创建好的Java工程如下图,包名和类名随意命名,但类名不要写DaoGenerator,因为这是系统的类名

(2) 在Java工程的build.gradle文件中引入GreenDaoGenerator

compile 'de.greenrobot:greendao-generator:2.0.0'

博主的daogenerator工程的build.gradle文件如下:

(3) 编写定制属于我们的Dao文件生成器,在里面定义我们的数据库名称,表结构,表的依赖关系,当然全都是面向对象的操作,不涉及到SQL语句,GreenDAO都帮我们封装好了,在生成的具体文件中就会看见SQL语句,这里主要参考这篇文章:http://my.oschina.net/cheneywangc/blog/196354
如果表的结构发生变化,即Dao文件的属性发生变化,那么必须修改Dao生成文件,然后重新生成相应的文件
本例中MyDaoGenerator的代码如下:

/*** GreenDao的实体类生成器*/
public class MyDaoGenerator {public static void main(String[] args) {//指定数据库版本号,以及自动生成代码的包路径Schema schema = new Schema(1, "com.hello1.model");//添加属性addNote(schema);//设置自动生成的代码的生成路径try {new DaoGenerator().generateAll(schema, "./app/src/main/java");} catch (Exception e) {e.printStackTrace();}}//添加数据库实体类public static void addNote(Schema schema) {//一个实体类对于数据库的一张表Entity note = schema.addEntity("Note");//接下来你便可以设置表中的字段,greenDAO 会自动根据实体类的属性值来创建表字段,并赋予默认值note.addIdProperty().autoincrement();note.addStringProperty("text").notNull();note.addShortProperty("content");note.addDateProperty("date");}
}

下面具体讲解:

Schema schema = new Schema(1, “com.hello1.model”);

首先创建Schema,第一个参数是数据库的版本号,第二个参数是指定生成的文件放在Android工程的哪个包下面,这里”com.hello1.model”是我的Android工程app的包路径,因为最终这些生成的文件是要我们用在Android中的
关于网上说的必须要在Android工程中新建一个src-gen目录,然后在build.gradle文件中配置source dir()的做法完全没有必要

接着就要创建表结构了,一个Entity就是一个表,下面的代码定义了建表的过程,虽然全部采用了面向对象的简表过程,但还是还要一定的SQL基础,否则从基本的表的结构,外键到用E-R图设计表结构都是需要数据库知识的,涉及到的多表查询,一对一,一对多的关系更是复杂

Entity note = schema.addEntity(“Note”);
note.addIdProperty().autoincrement();
note.addStringProperty(“text”).notNull();
note.addShortProperty(“content”);
note.addDateProperty(“date”);

3 在Android工程中使用GreenDAO

(1) 运行我们创建的Java工程,本例中生成的结果如下:

(2) 在Android工程(本例中就是app)中的build.gradle文件引入下面代码:

compile ‘de.greenrobot:greendao:2.0.0’

(3) MainActivity代码如下,布局文件只有2个按钮

private DaoMaster.DevOpenHelper helper;
private SQLiteDatabase db;
private DaoMaster daoMaster;
private DaoSession daoSession;
private NoteDao noteDao;
private Button btnTest;
private Button btnTest2;
private TextView tvShow;
private long count = 0;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);this.btnTest = (Button) findViewById(R.id.btn_test);this.btnTest2 = (Button) findViewById(R.id.btn_test_2);this.tvShow = (TextView) findViewById(R.id.tv_show);//创建数据库this.helper = new DaoMaster.DevOpenHelper(this, "test_db", null);this.db = helper.getWritableDatabase();this.daoMaster = new DaoMaster(db);this.daoSession = daoMaster.newSession();this.noteDao = daoSession.getNoteDao();this.btnTest.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {count++;Note note = new Note();note.setContent((short) count);note.setText("测试数据,id = " + count);note.setDate(new Date());//插入数据noteDao.insert(note);}});this.btnTest2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//取出所有数据List data = noteDao.queryBuilder().list();if (data == null) {tvShow.setText("木有数据");return;}StringBuilder builder = new StringBuilder();for (int i = 0; i < data.size(); i++) {Note note = (Note) data.get(i);builder.append(String.format("%d %s %s\n",note.getId(),note.getText(),note.getDate().toString()));}tvShow.setText(builder.toString());}});}

(3) 以dao结尾的类才是操作数据库的类,得到NoteDao之后,现在就可以开心的使用GreenDAO了,具体的查询等方法可参考官方文档:http://greendao-orm.com/documentation

4 总结

(1) GreenDAO比ormlite快,但是配置麻烦,还要额外的工程,而且每次创建表都很麻烦,没有ormlite的注解来的快,尤其是自己写JavaBean还要和Entity相互转换一下,也就是已经写好的JavaBean不能直接转化数据库实体类,好处就是建表的时候更加明显,注解就比较随意,像依赖关系,外键等,使用注解就不明显

5 转载请注明来自梧桐那时雨的博客:http://blog.csdn.net/fuchaosz/article/details/50225287

Android ORM框架GreenDao用法相关推荐

  1. Android ORM框架 GreenDao 的使用详解

    一.前言 关于 Android 中常用的数据存储方式我们前面已经讲了 Sp 存储 和 文件存储,但是对于数据量比较大,并且结构复杂的数据我们想要存储只能通过数据库进行处理,Android 中提供了一个 ...

  2. android 连接mysql orm_Android ORM框架 GreenDao 的使用详解

    一.前言 关于 Android 中常用的数据存储方式我们前面已经讲了 Sp 存储和文件存储,但是对于数据量比较大,并且结构复杂的数据我们想要存储只能通过数据库进行处理,Android 中提供了一个 S ...

  3. Android ORM 框架:GreenDao 数据库升级

    本文作者:Speedy CSDN 专栏:blog.csdn.net/speedystone 掘金专栏:juejin.im/user/57e082- 前言 在 Android ORM 框架:GreenD ...

  4. Android数据绑定框架DataBinding用法

    Android数据绑定框架DataBinding用法     [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/5195374 ...

  5. Android ORM 框架之 greenDAO 使用心得

    前言 我相信,在平时的开发过程中,大家一定会或多或少地接触到 SQLite.然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等.所以,适用于 Android 的ORM  ...

  6. Orm框架介绍和常见的Android Orm框架

    ORM(Object Relational Mapping)框架采用元数据来描述对象一关系映射细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中. 先介绍一下ORM的概念,以前也一直听说 ...

  7. ORM框架greenDao 2 (用于了解旧版本的使用方法,目前最新版本为3.2.2,使用注释的方式来生成)...

    摘要: Android中对SQLite数据库使用,是一件非常频繁的事情.现今,也有非常多的SQLite处理的开源框架,其中最著名的greenDao,它以占用资源少,处理效率高等特点,成为优秀的ORM框 ...

  8. 最受欢迎的5个Android ORM框架

    在开发Android应用时,保存数据有这么几个方式, 一个是本地保存,一个是放在后台(提供API接口),还有一个是放在开放云服务上(如 SyncAdapter 会是一个不错的选择). 对于第一种方式, ...

  9. android ORM框架的性能简单测试(androrm vs ormlite)

    2019独角兽企业重金招聘Python工程师标准>>> 前言 看了一下现在的android设备,性能都不差,就懒得直接用sqlite,直接上ORM框架把,上网搜了一圈,觉得andro ...

最新文章

  1. nginx伪静态之try_files和rewrite讲解
  2. js替换数组中字符串实例
  3. php curl_init不能用,curl_init()函数不起作用
  4. 傅里叶变换及其应用 pdf_应用傅里叶-小波检测方式的并联型有源电力滤波器,电能质量高...
  5. MySQL源码—线程篇
  6. 怎么样装mysql_如何安装MySQL数据库
  7. Android之内容提供者ContentProvider的总结
  8. 傅里叶变换进行图像变换Matlab实现
  9. AUC / uAUC
  10. 产品 软件验收标准参考
  11. kafka常见问题及优化
  12. CTF crypto(一)一些简单的编码与加密
  13. 新颖的自我介绍_简单新颖的自我介绍范文
  14. CSS animation-play-state用法
  15. iphone4s安装linux,苹果4s降级教程【图解】
  16. 关于以太坊公开的4个测试网络的区别:
  17. 深入探讨:linux中遍历文件夹下的所有文件
  18. 四大桌面虚拟化解决方案大PK
  19. 树莓派入门(三)之步进电机控制
  20. 消除警告(升级后block警告)

热门文章

  1. 进入注册表的一些常用命令
  2. 电脑插入U盘后,有提示音,但电脑不显示U盘
  3. myeclipse building workspace如何禁止及提高myeclipse速度
  4. 关于Spring Cloud:Mapper<>中的泛型红线:Type ‘org.apache.ibatis.annotations.Mapper‘ does not have type paramet
  5. 计算机网络多项式的定义,使用多项式方法定义一个圆
  6. ACC自适应巡航控制系统介绍
  7. halcon学习易错系列—创建空的object对象算子gen_empty_obj
  8. 淘宝天猫商家运营推广,淘宝超级推荐是什么
  9. 标签编辑软件linux,Ubuntu下安装音乐标签编辑软件Kid3 3.1
  10. 个人常用VScode插件及其配置