目录:

一、概述

二、下载并解压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. quote函数什么意思,怎么用

    转自: https://blog.csdn.net/qiqiyingse/article/details/70046543 quote函数 属于urllib库里面的一个函数 屏蔽特殊的字符.比如如果u ...

  2. Python中 *args 和 **kwargs 的区别

    先来看个例子: def foo(*args, **kwargs): print 'args = ', args print 'kwargs = ', kwargs print '----------- ...

  3. Pipeline和FeatureUnion

    注:本文是人工智能研究网的学习笔记 Pipeline:chaining(链接)estimators Pipeline可以用于把多个estimators级联合成一个estimator.这么做的原因是考虑 ...

  4. android handler messageQueue,looper

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 处理器获取 当前线程中的 循环器对象, 循环器 从 消息队列中 取出 消息, 给 处理器 ...

  5. BZOJ1597 USACO2008土地购买

    斜率优化DP. #include<bits/stdc++.h> using namespace std; ; long long f[N],n,cnt,q[N]; ; bool v[N]; ...

  6. BZOJ 1174 [Balkan2007]Toponyms(Trie)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1174 [题目大意] 选出一些字符串,使得字符串的最长公共前缀*字符串的总个数最大化 [ ...

  7. 程序逻辑问题---Writeup

    原题地址:http://ctf5.shiyanbar.com/web/5/index.php 打开后是一处登陆界面 右键查看源代码 发现有一处txt文件 很明显就是程序的源代码 可以看到其中一句 $s ...

  8. Windows下C语言调用dll动态链接库

    dll是windows下的动态链接库文件,下面记录一下在windows下如何调用C语言开发的dll动态链接库. 1.dll动态链接库的源代码 hello_dll.c #include "st ...

  9. phpunit Cannot redeclare class PHPUnit_Runner_Version

  10. MYSQL分段统计

    产品表 CREATE TABLE `product` ( `product_id` int(11) NOT NULL AUTO_INCREMENT, `product_model` varchar(2 ...