Android实战——GreenDao3.2的使用,爱不释手
1前言
GreenDao是一款操作数据库的神器,经过了2.0版本的升级后,已经被广泛的开发者使用。确实是很好用,入门简单,可以剩去了数据库的建表操作和数据库SQL的编写,博主用了一次之后爱不释手,和以前的数据库操作一大堆的代码将它缩成了一句话,舒服
2GreenDao3.2的简介
认识GreenDao之前必须知道ORM(Object Relation Mapping对象关系映射),其表现形式就是通过GreenDao将数据库和Bean对象关联起来,其表现形式如下图

GreenDao之所以很流行,跟它的优点是息息相关的,从官网中可以看到这样一张图,其表示了在主流的ORM第三方库中,其对数据库操作的速度是最快的

不仅如此,其优点还包括有以下几点
存取速度快
支持数据库加密
轻量级
激活实体
支持缓存
代码自动生成
3GreenDao3.2的配置
GreenDao的配置很简单,不过需要注意的是,有些人按照正确的配置后却频频出错,个人也经历过,最后的原因是网络有问题。因为校园网的DNS服务很差,所以解析不到GreenDao的依赖网站
一、需要在工程(Project)的build.gradle中添加依赖

二、在项目(Module)的build.gradle中添加依赖


上面是我自己建立工程的gradle文件的配置。另外,我将greendao官网示例的配置文件也贴出来。具体如下:


到这里就配置成功了
4GreenDao3.2的使用
配置完成后,最重要的就是GreenDao的使用了,或许使用过Bmob第三方后端云的同学会知道,他们的API有些相像,都是通过API来拼装SQL语句的
下面就以购物车的实战来使用GreenDao,这里的购物车展示图如下

我们所知道的数据库操作需要:数据库名、表名、字段名,缺一不可,下面就是这三项的创建
一、创建Bean对象(表名和字段名)
GreenDao需要创建Bean对象之后,该Bean对象就是表名,而它的属性值就是字段名,其实现是通过注释的方式来实现的,下面是购物车的Bean对象(每个Bean对象对应一张表)

这里需要注意的是,创建完成之后,需要build gradle来完成我们的代码自动生成,按Ctrl+F9(或者工具栏build下面的Make Project)对项目进行重新构建即可。自动生成的代码有
Bean实体的构造方法和get、set方法
DaoMaster、DaoSession、DAOS类

这里对Bean对象的注释进行解释
@Entity:告诉GreenDao该对象为实体,只有被@Entity注释的Bean类才能被dao类操作
@Id:对象的Id,使用Long类型作为EntityId,否则会报错。(autoincrement = true)表示主键会自增,如果false就会使用旧值
@Property:可以自定义字段名,注意外键不能使用该属性
@NotNull:属性不能为空
@Transient:使用该注释的属性不会被存入数据库的字段中
@Unique:该属性值必须在数据库中是唯一值
@Generated:编译后自动生成的构造函数、方法等的注释,提示构造函数、方法等不能被修改
假如需要对当前数据库表(一个实体对象,代表一张数据库表)中某个字段,或某些个字段,在进行数据插入的时候,假如其中这些字段值相等,则直接执行覆盖时,可以按照官网的介绍:
@Entity(indexes = {
@Index(value = "text, date DESC", unique = true)
})
public class Note {
@Id
private Long id;
@NotNull
private String text;
private Date date;
...
也就是类似如下:

value当中,填的字符串名必须要与字段名一致,value中填多个字段的话,则表示只有多个字段的值都同时相等的情况下,在进行插入数据库时才会进行覆盖。
二、创建数据库(数据库名)
数据库的表名和字段都建好了,下面差个数据库的创建,下面通过传统和GreenDao的比较来体验其优点
① 传统的数据库创建

② GreenDao数据库创建

可以发现,GreenDao已经将我们的数据库创建缩成几句话,代码会自动将Bean对象创建成表,不再是传统的手写SQL语句。这里的数据库创建只需要在Application中执行一次即可,这里对几个类进行解释
DevOpenHelper:创建SQLite数据库的SQLiteOpenHelper的具体实现
DaoMaster:GreenDao的顶级对象,作为数据库对象、用于创建表和删除表
DaoSession:管理所有的Dao对象,Dao对象中存在着增删改查等API
由于我们已经创建好了DaoSession和Shop的Bean对象,编译后会自动生成我们的ShopDao对象,可通过DaoSession获得
ShopDao dao = daoSession.getShopDao();
这里的Dao(Data Access Object)是指数据访问接口,即提供了数据库操作一些API接口,可通过dao进行增删改查操作
三、数据库的增删改查
数据库的表名、字段、数据库都建好了,下面就通过传统和GreenDao对数据库的操作来比较体验其优点
① 传统的增删改查

② GreenDao增删改查

效果很明显,GreenDao的封装更加短小精悍,语义明朗,下面对GreenDao中
5Dao对象其他API的介绍
增加单个数据
getShopDao().insert(shop);
getShopDao().insertOrReplace(shop);
增加多个数据
getShopDao().insertInTx(shopList);
getShopDao().insertOrReplaceInTx(shopList);
查询全部
List< Shop> list = getShopDao().loadAll();
List< Shop> list = getShopDao().queryBuilder().list();
查询附加单个条件
.where()
.whereOr()
查询附加多个条件
.where(, , ,)
.whereOr(, , ,)
查询附加排序
.orderDesc() 倒序
.orderAsc() 正序
查询限制当页个数
.offset(0) 从数据库0位置,第一条开始查询
- .limit() 查询多少个
查询总个数
.count()
修改单个数据
getShopDao().update(shop);
修改多个数据
getShopDao().updateInTx(shopList);
删除单个数据
getTABUserDao().delete(user);
删除多个数据
getUserDao().deleteInTx(userList);
删除数据ByKey
getTABUserDao().deleteByKey();
6结语
关于GreenDao的的基本概念与基本操作就讲到这里,更多对于GreenDao的数据库操作还需要多多从实战中去探索,这里只是一个快速入门的引导.GreenDao高级操作还包括有:多表查询、多表关联、session缓存等用法,可以到GreenDao的官网进行学习
Github:
https://github.com/AndroidHensen/GreenDaoDemo
Android实战——GreenDao3.2的使用,爱不释手的更多相关文章
- 9套Android实战经典项目资料分享给大家
通过项目学习收获更大. 1.基于Android平台实战爱短信项目 下载地址:http://pan.baidu.com/s/1hr8CEry 2.Android平台实战CRM客户关系管理(AChartE ...
- Android实战技巧:深入解析AsyncTask
AsyncTask的介绍及基本使用方法 关于AsyncTask的介绍和基本使用方法可以参考官方文档和Android实战技巧:多线程AsyncTask这里就不重复. AsyncTask引发的一个问题 上 ...
- 【Android实战开发】3G技术和Android发展简介
随着移动设备的不断普及和发展,相关软件的开发也越来越受到人们的关注,其中要提及的就是Android开发.本系列博客主要为大家介绍Android的开发,可能会有人问:现在互联网上已经有很多的Androi ...
- 【Android实战】----从Retrofit源代码分析到Java网络编程以及HTTP权威指南想到的
一.简单介绍 接上一篇[Android实战]----基于Retrofit实现多图片/文件.图文上传中曾说非常想搞明确为什么Retrofit那么屌. 近期也看了一些其源代码分析的文章以及亲自查看了源代码 ...
- [置顶]
【Android实战】----从Retrofit源码分析到Java网络编程以及HTTP权威指南想到的
一.简介 接上一篇[Android实战]----基于Retrofit实现多图片/文件.图文上传中曾说非常想搞明白为什么Retrofit那么屌.最近也看了一些其源码分析的文章以及亲自查看了源码,发现其对 ...
- Android实战简易教程-第三十九枪(第三方短信验证平台Mob和验证码自己主动填入功能结合实例)
用户注冊或者找回password时通常会用到短信验证功能.这里我们使用第三方的短信平台进行验证实例. 我们用到第三方短信验证平台是Mob,地址为:http://mob.com/ 一.注冊用户.获取SD ...
- Android实战简易教程-第四十枪(窃听风云之短信监听)
近期在做监听验证码短信自己主动填入的功能,无意间想到了一个短信监听的办法. 免责声明:短信监听本身是一种违法行为,这里仅仅是技术描写叙述.请大家学习技术就可以.(哈哈) 本实例是基于bmob提供的后台 ...
- 【Android实战】记录自学自己定义GifView过程,能同一时候支持gif和其它图片!【有用篇】
之前写了一篇博客.<[Android实战]记录自学自己定义GifView过程,具体解释属性那些事! [学习篇]> 关于自己定义GifView的,具体解说了学习过程及遇到的一些类的解释,然后 ...
- 苹果电脑基本设置+Linux 命令+Android 实战集锦
本文微信公众号「AndroidTraveler」首发. 背景 大多数应届毕业生在大学期间使用的比较多的是 windows 电脑,因此初入职场如果拿到一台苹果电脑,可能一时间不能够很快的上手.基于此,这 ...
随机推荐
- CentOS7 yum方式安装 MongoDB 3.4 复制集
CentOS7 yum方式安装 MongoDB 3.4 环境.准备 Centos7 系统 配置MongoDB的yum源,添加文件/etc/yum.repos.d/mongodb-org-3.4.rep ...
- pict总结
pict总结 pict总结 Friday, September 25, 2015 12:03 PM pict:微软出品的一个自动生成case工具,运用组合测试方法 1 pict安装 2 pict环境变 ...
- 手淘的移动端适配方案flexible
基于 vue-cli 配置手淘的 lib-flexible + rem,实现移动端自适应 安装 flexible npm install lib-flexible --save 引入 flexible ...
- Java的try-catch-finally
Javac语法糖之TryCatchFinally 如下引用文章:https://help.semmle.com/wiki/display/JAVA/Finally+block+may+not+comp ...
- vue2.0实现底部导航切换效果
使用vue2.0写移动端的时候,经常会写底部导航效果,点击切换路由效果,实现图片和文字颜色切换.vue2.0也提供了很多ul框架供我们实现效果,今天就用原生的实现一个底部导航切换,直接上代码: 效果图 ...
- 自己动手实现一个WEB服务器
自己动手实现一个 Web Server 项目背景 最近在重温WEB服务器的相关机制和原理,为了方便记忆和理解,就尝试自己用Java写一个简化的WEB SERVER的实现,功能简单,简化了常规服务器的大 ...
- java中的复制数组arraycopy()
System.arraycopy();//静态方法,在System类中定义,注意copy首字母是小写的 例子: int[] a = {1,2,3,4,5}; int[] b = {9,8,7,6}; ...
- 开源项目Log4j
一:Log4j入门简介学习 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务器.NT的事件记录器.UNIX ...
- rails安全性
如果你发布你的blog.那么其他人就可以随便修改和添加博客了. Rails提供了一个非常简单的http认证系统,可以非常有帮助的解决这种情况. 在PostsController里面我们需要一个方法阻止 ...
- MVC、MVCS、MVVM、MVP、VIPER等这么多架构模式哪一个好呢?
在项目开启阶段,其中一个很重要的环节就是选架构. 那么面对目前已知的这么多架构模式我们该怎么选择呢?这确实是个很让人头疼的问题! 下面我就在这里梳理一下目前常见的一些架构模式. 先逐个对它们的分析 ...