摘要: 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依赖。

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

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

public class ZGenerator {public static void main(String args[]) { // 创建一个模式Shcema // 参数1-版本,参数2-包名 Schema schema = new Schema(1, "cc.ibooker.daogenerator"); // 添加Entity-相当于表-用户对象 // 参数-代表生成对象类名 Entity user = schema.addEntity("User"); user.addIdProperty().autoincrement();// 添加ID-自增 user.addLongProperty("uId"); user.addStringProperty("uRealname"); user.addStringProperty("uSex"); user.addStringProperty("uBirthday"); user.addFloatProperty("uHeight"); user.addFloatProperty("uWeight"); user.addStringProperty("uDomicile"); user.addLongProperty("uPhone"); user.addStringProperty("uEmail"); user.addStringProperty("uWeibo"); // 朋友表/对象 Entity friend = schema.addEntity("Friend"); friend.addIdProperty().autoincrement();// 添加ID-自增 friend.addStringProperty("fGname"); // 添加外键-只能关联User主键 Property fUid = friend.addLongProperty("fUid").getProperty(); friend.addToOne(user, fUid);// 一对一 user.addToMany(friend, fUid).setName("friends");// 一对多 // 生成相关文件 try { // 参数1-schema,参数2-生成路径 new DaoGenerator().generateAll(schema, "app/src/main/java"); } catch (Exception e) { e.printStackTrace(); } } }

1、创建Schema(设置模式)

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

2、添加表对象

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

添加外键-只能关联主键

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

一对一关联

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

一对多关联

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

3、编译执行

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

greenDao2使用

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

dependencies {compile 'de.greenrobot:greendao:2.1.0'
}

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

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

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

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

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

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

3、删除数据

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

4、查询数据

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

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

GitHub地址

转载于:https://www.cnblogs.com/Free-Thinker/p/9887718.html

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

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

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

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

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

  3. Android ORM框架GreenDao用法

    Android ORM框架GreenDao用法 0 简介 android 上的ORM框架主要有两个:ormlite 和 GreenDAO,本篇主要介绍GreenDao的用法,原因是GreenDAO的速 ...

  4. typora显示版本过期,请下载最新版本,可是最新版本84块钱,咋办?

    typora显示版本过期,请下载最新版本,可是最新版本84块钱,咋办? 问题一–版本过低 方法有很多种,我就介绍一下我的方法吧 像我电脑的typora就出现了这样的问题,一个是typora版本过低,要 ...

  5. macos最新版本是什么_macOS的最新版本是什么?

    macos最新版本是什么 The latest version of macOS is macOS 10.15 Catalina, which Apple released on October 7, ...

  6. python3最新版本-mac下安装Python3.*(最新版本)

    前言:mac系统自带python,不过以当前mac系统的最新版本为例,自带的python版本都是2.*版本,虽然不影响老版本项目的运行,但是python最新的3.*版本的一些语法与2.*版本并不相同, ...

  7. pip show pip可以查看pip的版本以及升级pip到最新版本

    输入命令:pip show pip可以查看pip的版本,如果不是最新版最后会有提示如下: 输入命令:python -m pip install --upgrade pip可以升级pip到最新版本.

  8. 2019ug最新版本是多少_宝塔Linux面板7.4.2版本/Windows面板6.8版本请尽快升级到最新版本...

    宝塔Linux面板7.4.2版本/Windows面板6.8版本请尽快升级到7.4.3版本,因为这两个版本目前存在一个漏洞可能会被利用,如果你正好使用这两个版本的话请尽快升级到 Linux面板7.4.3 ...

  9. 在线升级R语言版本以及在RStudio容纳最新版本的R

    文章目录 1.升级R语言版本 2.RStudio容纳最新版本的R 3.参考资料 1.升级R语言版本 第一步 install.packages("installr")#安装 第二步 ...

最新文章

  1. 全国自考微型计算机原理及其应用,2010年10月全国自考微型计算机原理及应用试题...
  2. Android开发常用开源框架:图片处理
  3. 【CV项目实战】纯新手如何从零开始完成一个工业级图像分割任务的整个流程?...
  4. 动态的添加和丢弃关键点---32
  5. Kubernetes集群上的Apache Ignite和Spring第1部分:Spring Boot应用程序
  6. 培训机构破产了,“我还要还贷到2028年”
  7. 分布式监控系统Zabbix-3.0.3-完整安装记录(4)-解决zabbix监控图中出现中文乱码问题...
  8. spring定时器详解
  9. 数据结构——线段树学习笔记
  10. Android混淆介绍
  11. 怎么查看电脑IP地址?
  12. 查看服务器显卡GPU型号
  13. [转]高品质开源工具Chloe.ORM:支持存储过程与Oracle
  14. MICCAI 2022 | 深圳大学医学部智能超声实验室6篇论文分享!
  15. FlutterComponent最佳实践之沉浸式
  16. 有个程序媛上司是什么体验
  17. IAssemblyDoc Interface 学习笔记
  18. 眼睛疲劳及干涩的防治
  19. 正能量励志歌曲十大榜单盘点
  20. 单目多帧自监督深度估计(2021-2022)研究进展

热门文章

  1. Socket套接字 =======================
  2. JavaScript内置对象Date----格式化时间
  3. ionic2 安装与cordova打包
  4. [转]Global exception handling in Web API 2.1 and NLog
  5. 或许你不知道的10条SQL技巧(转自58沈剑原创)
  6. SWF 文件不能访问本地资源 只有仅限于文件系统的 SWF 文件和可信的本地 SWF 文件可以访问本地资源。...
  7. spring 概念理解(资料)
  8. 滑坡泥石流的防御措施_滑坡泥石流防御
  9. java+解析占位符,如何告诉Spring使用Java映射来解析属性占位符?
  10. python ssl_Python3 ssl模块不可用的问题