ORM框架greenDao 2 (用于了解旧版本的使用方法,目前最新版本为3.2.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() {
@Override
public 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提供了很多方法,这里只是写了一些常用方法。
ORM框架greenDao 2 (用于了解旧版本的使用方法,目前最新版本为3.2.2,使用注释的方式来生成)的更多相关文章
- ORM框架--GreenDao 3.0基本使用指南
0. ORM框架--GreenDao 3.0基本使用指南 1. Gradle 的配置 这里可以参照官方的文档进行最新的配置(本示例的版本等你看到可能就不是最新的了),但是值得注意的一点是,GreenD ...
- 数据库ORM框架GreenDao
常用的数据库: 1). Sql Server2). Access3). Oracle4). Sysbase5). MySql6). Informix7). FoxPro8). PostgreSQL9) ...
- Android 数据库ORM框架GreenDao学习心得及使用总结<一>
转: http://www.it165.net/pro/html/201401/9026.html 最近在对开发项目的性能进行优化.由于项目里涉及了大量的缓存处理和数据库运用,需要对数据库进行频繁的读 ...
- 【转载】Android开源:数据库ORM框架GreenDao学习心得及使用总结
转载链接:http://www.it165.net/pro/html/201401/9026.html 最近在对开发项目的性能进行优化.由于项目里涉及了大量的缓存处理和数据库运用,需要对数据库进行频繁 ...
- 对象关系映射(ORM)框架GreenDao简介和基本使用
官网上的介绍,greenDAO 是一个将对象映射到 SQLite 数据库中的轻量且快速的 ORM 解决方案. GreenDao特点 性能最大化,可能是Android平台上最快的ORM框架 易于使用的A ...
- npm命令,查看当前npm版本,更新nmp到最新版本,安装sails
打开Node.js command prompt 1 查看npm当前版本 npm -v 2 更新npm至最新版本 npm install npm@latest -g 3 安装sails npm in ...
- Android SQLite ORM框架greenDAO在Android Studio中的配置与使用
博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 博客园: 追风917 # 说明 greenDAO是安卓中处理SQLite数据库的一个开源的库,详情见其官网:我是官网 详 ...
- Android 自定义Android ORM 框架greenDAO数据库文件的路径
import android.content.Context; import android.content.ContextWrapper; import android.database.Datab ...
- Android 数据库ORM框架GreenDao学习心得及使用总结<二>
转:http://blog.csdn.net/xushuaic/article/details/24496191 第五篇 查询 查询会返回符合某些特定标准的实体.你可以使用原始的SQL定制查询语句,或 ...
随机推荐
- C语言中的extern
extern: 这个关键字真的比较恶心,在定义变量的时候,extern居然可以被省略(定义时,默认均省略): 在声明变量的时候,extern必须加在变量前. 所以有时候你搞不清楚是声明还是定义.:变量 ...
- Java并发编程实战3章
1.同步包括两方面:原子性和可见性. 2.可见性:因为在多线程程序中,如果没有采用正确的同步,有些线程就会得到失效数据. Java内存模型要求,变量的读取操作和写入操作都必须是原子操作,但对于非vol ...
- WordPress文章自动提取tag并添加链接
我们在编写文章时,经常需要添加一些标签关键词的链接,这样不仅可以优化我们的内链,对用户来说也可以参照相关的文章,如果对文章的关键字进行手动添加链接,那样对我们来说太麻烦了,而且在标签关键词很多的情况下 ...
- Linux系统——Rsync数据同步工具
Rsync的优点及缺点 优点:类似cp命令.scp命令,但rsync为增量复制工具 缺点:针对大文件,效率非常高(打包再比对),针对小文件,效率非常低. Rsync作用 (1)可使本地和远程两台主机之 ...
- java的TimeUtils或者DateUtils的编写心得
一.几种常见的日期和时间类介绍 介绍时间工具类不可避免必须要去触碰几个常见的日期和时间类,所以就简单介绍一下. 1.jdk1.8之前的日期时间类 a.Date类 我们可以通过new的方式生成一个Dat ...
- maven安装配置参数化打包命令
Maven使用 maven的配置文件看似很复杂,其实只需要根据项目的实际背景,设置个别的几个配置项而已.maven有自己的一套默认配置,使用者除非必要,并不需要去修改那些约定内容.这就是所谓的“约定优 ...
- Codeforces Round #431 (Div. 2) C. From Y to Y
题目: C. From Y to Y time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- SPOJ - COT Count on a tree
地址:http://www.spoj.com/problems/COT/en/ 题目: COT - Count on a tree #tree You are given a tree with N ...
- 重定向符号和tee命令区别
来源:http://zyp88.blog.51cto.com/1481591/1604036 功能说明:读取标准输入的数据,并将其内容输出成文件. 语 法:tee [-ai][--help][-- ...
- Linux数据备份与恢复
Linux数据备份及服务器重要数据类别分析 对 Linux 服务器来讲,当然最理想的就是把整块硬盘中的数据都备份,甚至连分区和文件系统都备份,这样如果硬盘损坏,那么我们可以直接把备份硬盘中的数据导入损 ...