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

摘要: 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性能更加优秀。
常用orm框架对比图

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(); }

Generator生成结构图

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/366827.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

配置MySQL以进行ADF开发

大家好。 今天&#xff0c;我将向您展示如何为Oracle ADF开发配置MySQL数据库。 恕我直言&#xff0c;当您将ADF与其他数据库而不是Oracle DB一起使用时&#xff0c;您将无法使用Oracle ADF的全部功能&#xff0c;有时您会发现自己正在寻找解决方法&#xff0c;以实现某些行为…

React Native面试知识点

本文原创首发于公众号&#xff1a;ReactNative开发圈&#xff0c;转载需注明出处。 本文会不定期不断更新&#xff0c;想查看最新版本请移步至https://github.com/forrest23/react-native-interview 1.React Native相对于原生的ios和Android有哪些优势&#xff1f; 1.性能媲美…

KIE-WB / JBPM控制台Ng –配置

大家好&#xff0c;这是我上一篇文章中有关如何使用jBPM Console的后续文章 。 这篇文章的主要思想是描述为了在您自己的公司中使用它&#xff0c;您需要对jBPM Console NG进行一些最常见的配置。 但是在讨论技术细节之前&#xff0c;我们将介绍KIE Workbench&#xff08;KIE-W…

自己写一个H5项目CI系统

持续集成&#xff08;Continuous integration&#xff0c;简称CI)系统在软件自动化构建&#xff08;包括编译、发布、自动化测试&#xff09;方面有着重要的作用&#xff0c;在之前&#xff0c;前端项目简单&#xff0c;很多时候发布都只是一些简单的拷贝&#xff0c;而随着web…

25.QT-模型视图

模型视图设计模式的核心思想 使模型(数据)与视图(显示)相分离模型只需要对外提供标准接口存取数据,无需数据如何显示视图只需要自定义数据的显示方式,无需数据如何组织存储当数据发生改变时,会通过信号通知视图当用户与视图进行交互时,会通过信号向模型发送交互信息 在QT中提供…

休眠事实:多级访存

在多个级别上检索根实体及其子关联是很常见的。 在我们的示例中&#xff0c;我们需要加载一个包含其树&#xff0c;分支和叶子的森林&#xff0c;并且我们将尝试查看Hibernate对于三种集合类型的行为&#xff1a;集合&#xff0c;索引列表和包。 这是我们的类层次结构的样子&…

前5个有用的隐藏Eclipse功能

Eclipse是野兽。 仅凭其力量才能超越其神秘感的设备。 有人将其称为连续体跨功能器 。 其他人则称它为透湿器 。 是的&#xff0c;它是如此之大&#xff0c;需要花费数年才能掌握。 然后&#xff0c;您的经理出现并告诉您&#xff1a;我们正在使用NetBeans。 开玩笑。 除了Ada…

linux如何解除密码,如何在Linux下解除PDF文件的密码?

【51CTO.com快译】今天&#xff0c;我碰巧与一位朋友共享一个受密码保护的PDF文件。我知道该PDF文件的密码&#xff0c;但不想透露。相反&#xff0c;我只想解除密码&#xff0c;将文件发送给朋友。于是我开始在网上找一些简单的方法&#xff0c;好解除PDF文件的密码保护。上网…

C#中结构体定义并转换字节数组

ref: https://www.cnblogs.com/dafanjoy/p/7818126.html C#中结构体定义并转换字节数组 最近的项目在做socket通信报文解析的时候&#xff0c;用到了结构体与字节数组的转换&#xff1b;由于客户端采用C开发&#xff0c;服务端采用C#开发&#xff0c;所以双方必须保证各自定义结…

2018移动端页面适配-自适应最新方案直接写px--------通过gulp工作流搭建一体化的移动端开发环境

1.开始 在flexible的GitHub上面写着 由于viewport单位得到众多浏览器的兼容&#xff0c;lib-flexible这个过渡方案已经可以放弃使用&#xff0c;不管是现在的版本还是以前的版本&#xff0c;都存有一定的问题。建议大家开始使用viewport来替代此方案。vw的兼容方案可以参阅《如…

jclouds的命令行界面

序幕 我使用和为jclouds贡献了一年多的时间。 到目前为止&#xff0c;我已经在很多领域广泛使用了它&#xff0c;尤其是在Fuse生态系统中 。 它的强大之处在于它缺少一件事&#xff0c;该工具可用于管理jclouds也提供访问权限的任何云提供商。 类似于EC2命令之类的工具&#xf…

中兴linux下载软件,国产操作系统中兴新支点使用WPS For Linux办公软件的体验报告...

以下将给你带来在国产操作系统中兴新支点操作系统下使用WPS For Linux办公软件的体验报告&#xff0c;WPS For Linux提供Deb、Rpm、Tar.xz、Snap软件包&#xff0c;你可以选择Tar.xz源码包编译安装&#xff0c;或在系统自带的软件中心下安装&#xff0c;也可以参考采用snap方式…

Java 教程(开发环境配置+基础语法)

Java 开发环境配置 在本章节中我们将为大家介绍如何搭建Java开发环境。 window系统安装java 下载JDK 首先我们需要下载java开发工具包JDK&#xff0c;下载地址&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/index.html&#xff0c;点击如下下载按钮&am…

数据采集工具Telegraf:简介及安装

接着上一篇博客&#xff1a;InfluxDB简介及安装&#xff0c;这篇博客介绍下Linux环境下Telegraf安装以及其功能特点。。。 官网地址&#xff1a;influxdata 官方文档&#xff1a;telegraf文档 环境&#xff1a;CentOS7.4 64位 Telegraf版本&#xff1a;0.11.1-1 一、Telegraf介…

初探小程序插件

插播公司招聘信息&#xff1a; https://cnodejs.org/topic/5a915706653c43b914684f90 小程序插件可以干嘛&#xff1f; 周二晚上&#xff08;3.13&#xff09;的一个小程序新功能发布了-【小程序插件】&#xff0c;一开始以为是小程序发布了类似npm的组件管理工具&#xff0c;…

从mysql向HBase+Phoenix迁移数据的心得总结

* 转载请注明出处 - yosql473 - 格物致知&#xff0c;经世致用 mysql -> HBase Phoenix 1.总体方案有哪些&#xff1f; 1&#xff09;通过Sqoop直接从服务器(JDBC方式)抽取数据到HBase中 因为数据量非常大&#xff0c;因此优先考虑用Sqoop和MR抽取。 使用Sqoop抽取数据有一…

玩转异步 JS :async/await 简明教程(附视频下载)

课程介绍 在软件开发领域&#xff0c;简洁的代码 > 容易阅读的代码 > 容易维护的代码&#xff0c;而 ES2017 中的 async/await 特性能让我们编写出相比回调地狱和 Promise 链式调用更直观、更容易理解的代码&#xff0c;await 关键字接收一个 Promise&#xff0c;等待代码…

分享轮子-flutter下拉刷新上拉加载

flutter下拉上拉组件轮子 什么是flutter? 首先说下flutter,估计这个应该挺多人没听过flutter这个框架,它是一个google推出的跨平台的移动应用UI框架,和React Native是同样的目的,支持三大平台:Android,Ios,还有一个是google新出的系统,忘了叫什么...本人React Native也是用过…

(8)Python判断结构

转载于:https://www.cnblogs.com/hankleo/p/9170325.html

History of program(1950-2020)

1957年 约翰巴科斯&#xff08;John Backus&#xff09;创建了是全世界第一套高阶语言&#xff1a;FORTRAN。 John Backus1959年 葛丽丝霍普&#xff08;Grace Hopper&#xff09;创造了现代第一个编译器A-0 系统&#xff0c;以及商用电脑编程语言“COBOL”&#xff0c;被誉为C…