摘要: Android中对SQLite数据库使用,是一件非常频繁的事情。现今,也有非常多的SQLite处理的开源框架,其中最著名的greenDao,它以占用资源少,处理效率高等特点,成为优秀的ORM框架之一。那么对于greenDao 2要如何使用呢?以及使用过程中需要注意哪些事项呢?那么这篇文章一定能够得到你想要的答案。
 

人生就是一连串的抉择,每个人的前途与命运,完全把握在自己手中,只要努力,终会有成。就业也好,择业也罢,创业亦如此,不要活在别人的嘴里,不要活在别人的眼里,而是把命运握在自己手里。

在了解greenDao之前首要知道什么是SQLite,什么是ORM?
SQLite是一款轻量级嵌入式关系型数据库,也是移动端最为常用的一种关系型数据库。
ORM对象关系映射,简单一点说就是实现数据库表结构与对象一一对印。

greenDao简介

官网解释:greenDAO: Android ORM for your SQLite database。
greenDAO是Android中对SQLite进行对象关系映射的一个框架。

greenDao之所以很流行,跟它的优点是息息相关的:

  • 一个精简的库
  • 性能最大化
  • 内存开销最小化
  • 易于使用的 API
  • 对 Android 进行高度优化

Android中ORM框架有很多,如OrmLite,ActiveAndroid等,但是相对而言,greenDao性能更加优秀。

greenDao-Generator2使用

在使用greenDao之前要生成相应的表,Bean,Dao文件等,这个生成过程可以利用Eclipse/MyEclipse/Android Studio等相关工具来实现。
如果使用Eclipse/MyEclipse实现,需要添加greendao-generator:2.1.0和freemaker两个jar。
如果使用Android Studio实现,只要在创建的Java Module中添加greendao-generator:2.1.0即可。
下面将以Android Studio为例,实现这一功能。

配置:首先创建一个Android工程,然后添加一个Module(Java Library),最后在Module的build.gradle文件中中添加greendao-generator:2.1.0依赖。

  1. dependencies {
  2. compile fileTree(include: ['*.jar'], dir: 'libs')
  3. compile 'de.greenrobot:greendao-generator:2.1.0'
  4. }

使用:greendao-generator是用来生成相应的表,Bean,Dao文件等。假如要生成一个用户表,一个朋友表,一个用户可以有多个朋友,一个朋友数据最多对应一个用户,那么该如何实现呢?

  1. public class ZGenerator {
  2. public static void main(String args[]) {
  3. // 创建一个模式Shcema
  4. // 参数1-版本,参数2-包名
  5. Schema schema = new Schema(1, "cc.ibooker.daogenerator");
  6. // 添加Entity-相当于表-用户对象
  7. // 参数-代表生成对象类名
  8. Entity user = schema.addEntity("User");
  9. user.addIdProperty().autoincrement();// 添加ID-自增
  10. user.addLongProperty("uId");
  11. user.addStringProperty("uRealname");
  12. user.addStringProperty("uSex");
  13. user.addStringProperty("uBirthday");
  14. user.addFloatProperty("uHeight");
  15. user.addFloatProperty("uWeight");
  16. user.addStringProperty("uDomicile");
  17. user.addLongProperty("uPhone");
  18. user.addStringProperty("uEmail");
  19. user.addStringProperty("uWeibo");
  20. // 朋友表/对象
  21. Entity friend = schema.addEntity("Friend");
  22. friend.addIdProperty().autoincrement();// 添加ID-自增
  23. friend.addStringProperty("fGname");
  24. // 添加外键-只能关联User主键
  25. Property fUid = friend.addLongProperty("fUid").getProperty();
  26. friend.addToOne(user, fUid);// 一对一
  27. user.addToMany(friend, fUid).setName("friends");// 一对多
  28. // 生成相关文件
  29. try {
  30. // 参数1-schema,参数2-生成路径
  31. new DaoGenerator().generateAll(schema, "app/src/main/java");
  32. } catch (Exception e) {
  33. e.printStackTrace();
  34. }
  35. }
  36. }

1、创建Schema(设置模式)

  1. /**
  2. * @param version 版本号-可以理解为数据库版本号
  3. * @param defaultJavaPackage 默认包名-即文件生成路径
  4. **/
  5. Schema schema = new Schema(int version, String defaultJavaPackage);

2、添加表对象

  1. /**
  2. * @param className 生成Bean文件的类名
  3. **/
  4. Entity entity = schema.addEntity(String className);
  5. // 添加主键-并实现主键自增
  6. entity.addIdProperty().autoincrement();
  7. // 添加字段名-根据添加类型进行设置
  8. entity.addStringProperty(String propertyName);
  9. entity.addLongProperty(String propertyName);

添加外键-只能关联主键

  1. // 添加外键-只能关联User主键
  2. Property property = entity.addLongProperty(String propertyName).getProperty();

一对一关联

  1. /**
  2. * @param target 目标表对象(关联对象)
  3. * @param fkProperty 外键
  4. **/
  5. entity.addToOne(Entity target, Property fkProperty);

一对多关联

  1. /**
  2. * @param target 目标表对象(关联对象)
  3. * @param fkProperty 外键
  4. **/
  5. ToMany tomany = entity.addToMany(Entity target, Property fkProperty);
  6. // 设置外键对象名称
  7. tomany.setName(String name);

3、编译执行

  1. try {
  2. // 参数1-schema,参数2-生成根路径
  3. new DaoGenerator().generateAll(schema, "app/src/main/java");
  4. } catch (Exception e) {
  5. e.printStackTrace();
  6. }

greenDao2使用

配置:在build.gradle(app)中加入greendao:2.1.0依赖。

  1. dependencies {
  2. compile 'de.greenrobot:greendao:2.1.0'
  3. }

使用:greendao:2.1.0主要是用来操作数据库,而对于数据库的操作主要是增删改查。
在实现数据库增删改查之前必须对相关Dao文件进行实例化,那么该如何进行实例化呢?

  1. // 获取一个可读可写数据库对象,参数1-上下文对象,参数2-数据库名称,参数3-游标工厂CursorFactory
  2. SQLiteDatabase db = new DaoMaster.DevOpenHelper(this, "ibookerdata.db", null).getWritableDatabase();
  3. // 获取DAO模式
  4. DaoMaster daoMaster = new DaoMaster(db);
  5. DaoSession daoSession = daoMaster.newSession();
  6. FriendDao friendDao = daoSession.getFriendDao();
  7. UserDao userDao = daoSession.getUserDao();

对Dao对象进行实例化之后,就可以通过相关Dao来操作相关表。
1、插入数据-GreenDao可以实现单一对象插入和批量插入功能。

  • 插入一条数据
  1. // 参数为User对象
  2. long id = userDao.insert(User user);
  • 批量插入数据
  1. // 参数为User对象集
  2. userDao.insertInTx(List<User> users);

2、修改数据-GreenDao可以实现单一对象修改和批量修改功能。

  • 修改一条数据
  1. // 参数为User对象
  2. userDao.update(User user);
  • 批量修改数据
  1. // 参数为User对象集
  2. userDao.updateInTx(List<User> users);

3、删除数据

  • 删除一条数据
  1. userDao.delete(User user);
  • 根据主键ID删除数据
  1. userDao.deleteByKey(K key);
  • 批量删除数据
  1. userDao.deleteInTx(List<User> users);
  • 删除所有数据
  1. userDao.deleteAll();

4、查询数据

  • 查询所有数据-三种方式
  1. // 方式一
  2. List<User> list = userDao.queryBuilder().list();
  3. // 方式二
  4. List<User> list = new ArrayList<>();
  5. Iterator iterator = userDao.queryBuilder().listIterator();
  6. while (iterator.hasNext()) {
  7. User user = (User) iterator.next();
  8. // 一般用来筛选需要的对象
  9. list.add(user);
  10. }
  11. // 方式三
  12. userDao.loadAll();
  • 懒加载-记得使用完之后关闭掉close
  1. LazyList<User> list = userDao.queryBuilder().listLazy();
  2. list.close();
  • 条件查询
  1. // keyWord为关键字
  2. // 查询相等数据
  3. userDao.queryBuilder().where(UserDao.Properties.URealname.eq(keyWord)).unique();
  4. // 查询相等数据集
  5. userDao.queryBuilder().where(UserDao.Properties.URealname.eq(keyWord)).list();
  6. // 查询不相等数据
  7. userDao.queryBuilder().where(UserDao.Properties.URealname.notEq(keyWord)).list();
  8. // 模糊查询
  9. userDao.queryBuilder().where(UserDao.Properties.UBirthday.like("%" + keyWord + "%")).list();
  10. // 范围查询-minValue最小值,maxValue最大值
  11. userDao.queryBuilder().where(UserDao.Properties.UBirthday.between(minValue, maxValue)).list();
  12. // 查询大于
  13. userDao.queryBuilder().where(UserDao.Properties.UHeight.gt(keyWord)).list();
  14. // 大于等于
  15. userDao.queryBuilder().where(UserDao.Properties.UHeight.ge(keyWord)).list();
  16. // 小于
  17. userDao.queryBuilder().where(UserDao.Properties.UWeight.lt(keyWord)).list();
  18. // 小于等于
  19. userDao.queryBuilder().where(UserDao.Properties.UWeight.le(keyWord)).list();
  20. // 升序查询
  21. userDao.queryBuilder().orderAsc(UserDao.Properties.Id).list();
  22. // 倒序查询
  23. userDao.queryBuilder().orderDesc(UserDao.Properties.Id).list();
  • 原生SQL查询
  1. // 查询有朋友的用户信息
  2. String sql = "_id in (select f_uid from friend)";
  3. userDao.queryBuilder().where(new WhereCondition.StringCondition(sql)).list();
  • 线程查询
  1. final Query query = userDao.queryBuilder().build();
  2. new Thread(new Runnable() {
  3. @Override
  4. public void run() {
  5. query.forCurrentThread().list();
  6. }
  7. }).start();
  • 一对一查询
  1. List<Friend> list = friendDao.queryBuilder().list();
  2. for (Friend friend : list) {
  3. User user = friend.getUser();
  4. }
  • 一对多查询
  1. List<User> list = userDao.queryBuilder().list();
  2. for (User user : list) {
  3. List<Friend> friends = user.getFriends();
  4. }

greenDao提供了很多方法,这里只是写了一些常用方法。

GitHub地址

ORM框架greenDao 2 (用于了解旧版本的使用方法,目前最新版本为3.2.2,使用注释的方式来生成)的更多相关文章

  1. ORM框架--GreenDao 3.0基本使用指南

    0. ORM框架--GreenDao 3.0基本使用指南 1. Gradle 的配置 这里可以参照官方的文档进行最新的配置(本示例的版本等你看到可能就不是最新的了),但是值得注意的一点是,GreenD ...

  2. 数据库ORM框架GreenDao

    常用的数据库: 1). Sql Server2). Access3). Oracle4). Sysbase5). MySql6). Informix7). FoxPro8). PostgreSQL9) ...

  3. Android 数据库ORM框架GreenDao学习心得及使用总结<一>

    转: http://www.it165.net/pro/html/201401/9026.html 最近在对开发项目的性能进行优化.由于项目里涉及了大量的缓存处理和数据库运用,需要对数据库进行频繁的读 ...

  4. 【转载】Android开源:数据库ORM框架GreenDao学习心得及使用总结

    转载链接:http://www.it165.net/pro/html/201401/9026.html 最近在对开发项目的性能进行优化.由于项目里涉及了大量的缓存处理和数据库运用,需要对数据库进行频繁 ...

  5. 对象关系映射(ORM)框架GreenDao简介和基本使用

    官网上的介绍,greenDAO 是一个将对象映射到 SQLite 数据库中的轻量且快速的 ORM 解决方案. GreenDao特点 性能最大化,可能是Android平台上最快的ORM框架 易于使用的A ...

  6. npm命令,查看当前npm版本,更新nmp到最新版本,安装sails

    打开Node.js command prompt 1 查看npm当前版本 npm -v 2 更新npm至最新版本 npm install npm@latest -g 3 安装sails  npm in ...

  7. Android SQLite ORM框架greenDAO在Android Studio中的配置与使用

    博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 博客园: 追风917 # 说明 greenDAO是安卓中处理SQLite数据库的一个开源的库,详情见其官网:我是官网 详 ...

  8. Android 自定义Android ORM 框架greenDAO数据库文件的路径

    import android.content.Context; import android.content.ContextWrapper; import android.database.Datab ...

  9. Android 数据库ORM框架GreenDao学习心得及使用总结<二>

    转:http://blog.csdn.net/xushuaic/article/details/24496191 第五篇 查询 查询会返回符合某些特定标准的实体.你可以使用原始的SQL定制查询语句,或 ...

随机推荐

  1. abap编辑器中代码不可修改

    当出现abap编辑器中代码不能修改的情况,可以按如下设置: edit——> 修改操作——>关闭助手

  2. Spring boot 打包瘦身方法

    背景 随着spring boot 的流行.越来越多的来发着选择使用spring boot 来发 web 应用. 不同于传统的 web 应用 需要 war 包来发布应用. spring boot 应用可 ...

  3. media query媒体查询

    媒体查询(CSS3 media query) 一.逻辑操作符:not.and.only not:not操作符用来对一条媒体查询的结果取反. and:and操作符用来把多个媒体属性组合起来,合并到同一条 ...

  4. C++实现不能继承的类

    实现一个不能继承的类,这在Java等语言中是很好实现的,被final关键字修饰的类不能被继承. C++中没有类似的关键字,须自己实现.一般有如下两种方法: 1.设置构造方法与析构方法为私有 class ...

  5. springBoot 整合 RabbitMQ 的坑

    1.Consumer raised exception, processing can restart if the connection factory supports it. Exception ...

  6. javascript 闭包 内存

  7. 开发者不可不知的五款DIY快速开发工具,你造吗

    对于非专业的移动开发者,弱化编程能力的快发开发工具实用性够强,无需编程只要借助工具提供的各种功能模块,就能开发出属于自己的应用,而支持DIY更能使应用开发锦上添花,借助快速开发工具开发出属于自己的“能 ...

  8. LRU算法---缓存淘汰算法

    计算机中的缓存大小是有限的,如果对所有数据都缓存,肯定是不现实的,所以需要有一种淘汰机制,用于将一些暂时没有用的数据给淘汰掉,以换入新鲜的数据进来,这样可以提高缓存的命中率,减少磁盘访问的次数. LR ...

  9. 在vue项目中使用codemirror插件实现代码编辑器功能(代码高亮显示及自动提示

    在vue项目中使用codemirror插件实现代码编辑器功能(代码高亮显示及自动提示) 1.使用npm安装依赖 npm install --save codemirror; 2.在页面中放入如下代码 ...

  10. SQL学习笔记之MySQL索引知识点

    0x00 概述 之前写过一篇Mysql B+树学习,简单的介绍了B+数以及MySql使用B+树的原因, 有了这些基础知识点,对MySql索引的类型以及索引使用的一些技巧,就比较容易理解了. 0x01 ...