目录:

一、概述

二、下载并解压greenDAO相关资源

三、应用greenDAO框架

  1、创建Java工程

  2、添加类库支持

  3、创建类

四、代码分析

五、使用greenDAO

六、源码下载

一、概述

  Android开发中对数据的存储和操作是避免不了的,为此android平台为我们提供了多种存储数据的方式,如文件、SharedPreferences、SQLite等。每种数据存储方式各有不同特点,适用不同场景,其中SQLite应用的较多。Android虽然提供了SQLiteDatabase、SQLiteOpenHelper帮助我们进行数据库操作,但是在实际开发中应用起来是很繁琐的,那么有没有更加方便、简洁的方式来操作SQLite数据库呢?答案是肯定的,那就是ORM框架。

  现在应用于android平台中的orm框架还是比较多的,如greenDAO、ormlite、ActiveAndroid、SugarORM等,其中greenDAO运行效率最高、内存消耗最少。下面我们就来看看greenDAO的具体用法。

二、下载并解压greenDAO相关资源

  通过官网,可以获取greenDAO的相关资源,官网地址:http://greendao-orm.com/ 。

  通过上述地址,将greenDAO相关资源下载解压后,可得到六个相关的项目工程:

1、  DaoCore:greenDAO的核心库。

2、  DaoExample:greenDAO使用范例项目。

3、  DaoExampleGenerator:greenDAO使用范例的实体类及DAO组件的生成器项目。

4、  DaoGenerator:greenDAO的DAO组件生成器项目。

5、  DaoTest:greenDAO的测试项目。

6、  PerformanceTestOrmLite:ormlite框架性能测试项目

三、应用greenDAO框架

  获取资源后,我们来看看如何在我们的android项目中应用greenDAO框架。结合官网文档和范例可知android项目中用到的实体及greenDAO的DAO组件需要又DAO组件生成器工程来生成。DAO组件生成器工程创建及相关代码具体如下:

1、创建Java工程

  使用MyEclipse创建一个普通的java工程,工程名为:JREDU_DAOGENERATOR。注意是java工程而不是一个android工程。

2、为工程JREDU_DAOGENERATOR添加类库支持

  为工程JREDU_DAOGENERATOR添加类库支持:greenDAO-generator.jar和freemarker.jar。

  a) Freemaker.jar可通过此地址进行下载:http://jaist.dl.sourceforge.net/project/freemarker/freemarker/2.3.21/freemarker-2.3.21.tar.gz

  b) greenDAO-generator.jar可通过DaoGenerator导出。只需要导出src和src-template两个目录即可

3、在工程JREDU_DAOGENERATOR创建类JREDUDaoGenerator

  在工程JREDU_DAOGENERATOR创建类JREDUDaoGenerator,具体编码如下:

public static void main(String[] args) throws IOException, Exception {
Schema schema = new Schema(1, "com.jredu.entity");
//实体类
Entity employee = schema.addEntity("Employee");
employee.addIdProperty(); //主键
employee.addStringProperty("name");
employee.addDateProperty("hireDate");
//生成
new DaoGenerator()
.generateAll(schema,"E:\\android_space\\JREDU_GREENDAO\\src");
}

  运行代码,在控制台可见如下图结果:

  打开上图中的目录,我们可以看到此工程为我们生成了4个文件,分别为EmployeeDao、Employee、DaoMaster、DaoSession,文件的内容和作用,后文在做介绍。

  通过以上步骤,我们完了实体类和DAO组件的生成,下面我们来分析下代码中涉及的类及它们的作用。

四、代码分析

  Schema,模式,通过源码我们可以看到此类的一些属性,如:

Private final int version:代表构建数据库的版本号。

Private final String defaultJavaPackage:代表生成实体类的默认包。

Private final List<Entity> entities:存放Entity的集合。

  因此我们也可以把Schema看做是存放实体的容器。

  通过构造函数:Schema schema = new Schema(1, "com.jredu.entity");我们创建了一个模式,参数1代表数据库的版本号,”com.jredu.entity”代表生成的java类的包,同时也是生成类存放路径的一部分。

  通过方法:Entity employee = schema.addEntity("Employee");创建了一个类名为Employee的Entity对象,并将其添加到schema对象的entities集合属性中。

  Property:实体属性的模型,用于关联实体属性和表的列。

  ToOne、ToMany:用于关联关系映射。

  Entity实体的模型,可用于将实体类映射到对应的表。主要属性有className、tableName、属性、索引、关系等内容,具体请查看源码

Schema、Entity、Property、Index、ToOne、ToMany关系图:

  DaoGenerator:实体类和DAO组件的生成器,generateAll根据schema和目录参数,首先生成文件存放目录,并从schema中取出所有entity,根据freemaker模板生成对应的实体了和DAO组件。

五、使用greenDAO

  相关组件已经生成,下面我们继续介绍,如何在android项目中使用greenDAO,过程如下:

1、 创建android工程,工程名:JREDU_GREENDAO。

2、 创建包名,与上面构建的Schema中的包名一致。本文案例直接将实体类和DAO组件的生成到本工程下。

3、为JREDU_GREENDAO添加greenDAO的jar。可以从工程DaoExample中拷贝。

4、主要代码如下:

  对象声明部分:

private DaoMaster daoMaster;
private DaoSession daoSession;
private EmployeeDao employeeDao;
private SQLiteDatabase db;

  对象的创建部分:

DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "jredu.db", null);
db = helper.getWritableDatabase();
daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
employeeDao = daoSession.getEmployeeDao();

  添加功能:

String name = this.content.getText().toString();
if(TextUtils.isEmpty(name)){
Toast.makeText(this, "请输入员工姓名!", Toast.LENGTH_SHORT).show();
return;
}
Employee emp = new Employee(null, name, new Date());
long empId = employeeDao.insert(emp);
this.show.setText("新增员工的编号:"+empId+","+emp.getId());
//一次插入多个对象
List<Employee> list = new ArrayList<Employee>();
list.add(new Employee(null, "李四", new Date()));
list.add(new Employee(null, "王五", new Date())); employeeDao.insertInTx(list, true);
StringBuilder sb = new StringBuilder("批量新增成功后的员工编号:");
for(Employee e:list){
sb.append(e.getId());
}
this.show.setText(this.show.getText()+","+sb.toString());

查询部分:

 List<Employee> emps= employeeDao.loadAll();
StringBuilder empStr = new StringBuilder();
for(Employee e: emps){
empStr.append("编号:").append(e.getId()).append(",姓名:").append(e.getName()).append(",雇佣日期:").append(e.getHireDate());
}
this.show.setText(empStr.toString());

  最终效果图如下:

  从代码中,我们看到功能的实现主要使用了Employee、EmployeeDao、DaoMaster、DaoSession。

Employee:实体对象,映射到表EMPLOYEE。

EmployeeDAO:通过代码可知此类提供了生成建表、和删表的方法,并类继承了AbstractDao(greenDAO核心类之一,封装了操作表中数据的各种方法)。

DaoMaster:继承自AbstractDaoMaster,用于创建数据库,并管理数据库连接。

DaoSession:继承自AbstractDaoSession,所有DAO对象的入口,通过此类可获得实体了的DAO组件。

六、源码下载

  以上是geenDAO的基本使用过程,DAO组件中的方法、多表关联等在后续文章中继续讲解。

  如有疑问,可下载源码查看详细内容,也可直接评论咨询哦!

作者:杰瑞教育
出处:http://www.cnblogs.com/jerehedu/ 
本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
 

android_orm框架之greenDAO(一)的更多相关文章

  1. android_orm框架之greenDAO(二)

    一.概述 在上次greenDao第一篇文章中,我们对greenDao的使用步骤和基本用法给大家做了介绍,文章链接:http://www.cnblogs.com/jerehedu/p/4304766.h ...

  2. Android开发数据库之第三方ORM框架(GreenDao)

    移动APP追求追求功能实现的同一时候,用户体验很重要.開始APP的同一时候.要时刻的切换开发人员的角色,如你开发的时候.是 站在APP的开发角色,处于生产者的位置:当你測试的时候.你应该把自己放在用户 ...

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

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

  4. Android ORM 框架之 greenDAO

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

  5. 数据库开源框架之GreenDAO

    主页: https://github.com/greenrobot/greenDAO 配置: 添加以下依赖 * compile 'de.greenrobot:greendao:2.1.0' * com ...

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

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

  7. Android中的GreenDao框架修改数据库的存储路径

    目前android中比较热门的数据库框架有greenDAO.OrmLite.AndrORM,其中我比较喜欢用GreenDao,其运行效率最高,内存消耗最少,性能最佳.具体怎么使用GreenDao,网上 ...

  8. Android开发之手把手教你写ButterKnife框架(三)

    欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/52672188 本文出自:[余志强的博客] 一.概述 上一篇博客讲了, ...

  9. Android必知必会--GreenDao缓存

    Github版 CSDN版 本篇文章不是介绍GreenDao的配置和基础使用,记录一下GreenDao缓存的问题,帮助遇到同样问题的朋友找到原因和方法,下面是示例: 场景重现 //第一次查询 List ...

随机推荐

  1. Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) F. High Cry(思维 统计)

    F. High Cry time limit per test 1 second memory limit per test 512 megabytes input standard input ou ...

  2. CentOS通过光盘启动救援数据

    (1).CentOS6 1)首先确保实体机有光盘,虚拟机有光盘镜像.并通过BIOS设置从光盘启动,实体机请通过提示进入BIOS,虚拟机请找到上方菜单中虚拟机-->电源-->打开电源时进入固 ...

  3. ARM 中必须明白的几个概念

    文章具体介绍了关于ARM的22个常用概念. 1.ARM中一些常见英文缩写解释 MSB:最高有效位: LSB:最低有效位: AHB:先进的高性能总线: VPB:连接片内外设功能的VLSI外设总线: EM ...

  4. 排序算法之直接插入排序Java实现

    排序算法之直接插入排序 舞蹈演示排序: 冒泡排序: http://t.cn/hrf58M 希尔排序:http://t.cn/hrosvb  选择排序:http://t.cn/hros6e  插入排序: ...

  5. bzoj3456 城市规划 多项式求In

    \(n\)个点的无向联通图的个数 打着好累啊 一定要封装一个板子 记\(C(x)\)为无向图个数的指数型生成函数,\(C(0) = 1\) 记\(G(x)\)为无向联通图个数的指数型生成函数,\(G( ...

  6. 20162307 课堂测试 hash

    20162307 课堂测试 hash 作业要求 利用除留余数法为下列关键字集合的存储设计hash函数,并画出分别用开放寻址法和拉链法解决冲突得到的空间存储状态(散列因子取0.75) 关键字集合:85, ...

  7. python开发_tkinter_菜单的不同选项

    python的tkinter模块中,菜单也可以由你自定义你的风格 下面是我做的demo 运行效果: ====================================== 代码部分: ===== ...

  8. [Visual Studio] 重置默认设置 还原默认设置

    恢复默认设置的2种方法 如果VS出现问题或设置变乱,可以通过恢复默认设置使之回到安装成功时的状态,从而解决出现的问题.VS恢复默认设置的方法有2种,分别是:通过“导入和导出设置”实现和通过命令实现. ...

  9. Android中播放本地SD卡中歌曲须要的加入的权限

    使用MediaPlayer播放本地Mp3文件时.须要注意的訪问路径的问题以及訪问权限的问题. 1.訪问路径:/storage/emulated/0 此路径即为手机的根路径,能够通过下载ES文件浏览器软 ...

  10. Flex父子窗体相互调用

    Flex父子窗体相互调用 1.设计思路 (1)子窗体调用父窗体的方法 (2)子窗体做了改动后,返回父窗体,父窗体调用子窗体函数 2.设计源代码 (1)父窗体 ParentWindow.mxml: &l ...