android_orm框架之greenDAO(一)
目录:
一、概述
1、创建Java工程
2、添加类库支持
3、创建类
四、代码分析
六、源码下载
| 一、概述 |
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(一)的更多相关文章
- android_orm框架之greenDAO(二)
一.概述 在上次greenDao第一篇文章中,我们对greenDao的使用步骤和基本用法给大家做了介绍,文章链接:http://www.cnblogs.com/jerehedu/p/4304766.h ...
- Android开发数据库之第三方ORM框架(GreenDao)
移动APP追求追求功能实现的同一时候,用户体验很重要.開始APP的同一时候.要时刻的切换开发人员的角色,如你开发的时候.是 站在APP的开发角色,处于生产者的位置:当你測试的时候.你应该把自己放在用户 ...
- Android ORM 框架之 greenDAO 使用心得
前言 我相信,在平时的开发过程中,大家一定会或多或少地接触到 SQLite.然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等.所以,适用于 Android 的ORM ...
- Android ORM 框架之 greenDAO
前言 我相信,在平时的开发过程中,大家一定会或多或少地接触到 SQLite.然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等.所以,适用于 Android 的ORM ...
- 数据库开源框架之GreenDAO
主页: https://github.com/greenrobot/greenDAO 配置: 添加以下依赖 * compile 'de.greenrobot:greendao:2.1.0' * com ...
- ORM框架greenDao 2 (用于了解旧版本的使用方法,目前最新版本为3.2.2,使用注释的方式来生成)
摘要: Android中对SQLite数据库使用,是一件非常频繁的事情.现今,也有非常多的SQLite处理的开源框架,其中最著名的greenDao,它以占用资源少,处理效率高等特点,成为优秀的ORM框 ...
- Android中的GreenDao框架修改数据库的存储路径
目前android中比较热门的数据库框架有greenDAO.OrmLite.AndrORM,其中我比较喜欢用GreenDao,其运行效率最高,内存消耗最少,性能最佳.具体怎么使用GreenDao,网上 ...
- Android开发之手把手教你写ButterKnife框架(三)
欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/52672188 本文出自:[余志强的博客] 一.概述 上一篇博客讲了, ...
- Android必知必会--GreenDao缓存
Github版 CSDN版 本篇文章不是介绍GreenDao的配置和基础使用,记录一下GreenDao缓存的问题,帮助遇到同样问题的朋友找到原因和方法,下面是示例: 场景重现 //第一次查询 List ...
随机推荐
- shell 统计行数
语法:wc [选项] 文件… 说明:该命令统计给定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取.wc同时也给出所有指定文件的总统计数.字是由空格字符区分开的最大字符串. 该命令各选 ...
- Jquery的方法(一)
一.文档操作1.内部插入:append(),appendTo(),prepend():2.外部插入:after(),before():3.删除操作:remove(),empty():4.克隆操作:cl ...
- 内容播放colorbox
1.需要的js (1)jquery (2)colorbox (http://www.jacklmoore.com/colorbox/ 下载文件夹,其中有js.css文件) //加载的时候注意文件的路径 ...
- 【BZOJ 4558】 4558: [JLoi2016]方 (计数、容斥原理)
未经博主同意不能转载 4558: [JLoi2016]方 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 362 Solved: 162 Descri ...
- 1 Scala基本概念 +IDE
Scala基本概念 +IDE 推荐:<Scala编程> 1 基本概念 在Spark开发中,Scala被认为是目前和Spark兼容最好的语言. Scala运行在标准的java平台,可以与ja ...
- java线程本地变量
ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是threadlocalvariable(线程局部变量).也许把它命名为Thre ...
- Mysql的学习随笔day2
关于输入中文的问题,各种更改完utf8后仍然乱码. 最后找到一种可行的方法:在insert之前,输入 set names 'gbk' 约束保证数据的完整性和一致性.约束分为表级约束和列级约束,前者可以 ...
- .net orm类库 kiss.data 简单文档记录
kiss.data的简单记录 == [github地址](https://github.com/sdming/Kiss.Data) kiss.data是golang的数据库访问类库[kdb](http ...
- Syslink Control in MFC 9.0(转)
Visual Studio 2008 (formely code-named ‘Orcas’) has several important updates for VC++ and MFC. Amon ...
- WINDOWS 的 MKLINK : 硬链接,符号链接 : 文件符号链接, 目录符号链接 : 目录联接
玩转WIN7的MKLINK 引言: 换了新电脑,终于再次使用上啦WIN7 ,经过一个周每天重装N次系统,... ... ... ... 在xp系统下,junction命令要用微软开发的小程序 junc ...
