greenDao官网地址:http://greenrobot.org/greendao/

一、前言

1、greenDao:对您的数据库使用greenDao ORM(Object Relational Mapping)
greenDao是一个开源的Android ORM,使得Sqlite数据库变得更加方便。它减轻了开发者处理低级数据需求,从而缩短了开发时间。Sqlite是一个嵌入型的关系数据库。但是,编写SQL和解析查询结果是相当冗长和耗时的任务,greenDao通过将Java对象映射到数据库表(称为ORM,“对象/关系映射”)来释放这些。这样,您可以使用简单的面向对象的API存储,更新,删除和查询Java对象。
Object Relation Mapping对象关系映射

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

3、greenDao的功能预览
最高性能(可能是Android的最快ORM);
易于使用的强大的API,涵盖关系和联接;
最小的内存消耗;
小的库大小(<100KB),以保持您的构建时间低,并避免65k方法限制;
数据库加密:greenDAO支持SQLCipher以保证用户的数据安全;
强大的社区:超过5.000 GitHub Start表明有一个强大和活跃的社区;

二、GreenDao3.2的配置

下面我就根据网上的一些教程进行配置,3.0之前的配置貌似比较烦,还好升级了
亲测有效!
1、在工程(Project)的build.gradle中添加依赖

dependencies {//greenDao生产代码插件classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'}

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

//greendao插件
apply plugin: 'org.greenrobot.greendao'
android {greendao {//数据库schema版本,也可以理解为数据库版本号schemaVersion 1//设置DaoMaster 、DaoSession、Dao包名daoPackage 'com.millet.demotest.db'//设置DaoMaster 、DaoSession、Dao目录targetGenDir 'src/main/java'//设置生成单元测试目录//targetGenDirTest//设置自动生成单元测试用例//generateTests}
}
dependencies {compile 'org.greenrobot:greendao:3.2.0'
}

在gradle的根模块中加入上述代码,就完成了我们的基本配置了。
schemaVersion—->指定数据库schema版本号,迁移等操作会用到
daoPackage——–>通过gradle插件生成的数据库相关文件的包名,默认为你的entity所在的包名
targetGenDir——–>这就是我们上面说到的自定义生成数据库文件的目录了,可以将生成的文件放到我们的Java目录中,而不是build中,这样就不用额外的设置资源目录了

三、创建实体类(表名和字段名)

GreenDao需要创建Bean对象之后,该Bean对象就是表名,而它的属性值就是字段名,其实现是通过注释的方式来实现的,下面是一个的Bean对象(每个Bean对象对应一张表)

@Entity
public class Shop{//表示为购物车列表public static final int TYPE_CART = 0x01;//表示为收藏列表public static final int TYPE_LOVE = 0x02;//不能用int@Id(autoincrement = true)private Long id;//商品名称@Uniqueprivate String name;//商品价格@Property(nameInDb = "price")private String price;//已售数量private int sell_num;//图标urlprivate String image_url;//商家地址private String address;//商品列表类型private int type;
}

这里需要注意的是,创建完成之后,需要build gradle来完成我们的代码自动生成。自动生成的代码有:

Bean实体的构造方法和get、set方法
DaoMaster、DaoSession、DAOS类

生成上面的方法和类需要编译或者运行一下:

这里对Bean对象的注释进行解释:

@Entity:告诉GreenDao该对象为实体,只有被@Entity注释的Bean类才能被dao类操作
@Id:对象的Id,使用Long类型作为EntityId,否则会报错。(autoincrement = true)表示主键会自增,如果false就会使用旧值
@Property:可以自定义字段名,注意外键不能使用该属性
@NotNull:属性不能为空
@Transient:使用该注释的属性不会被存入数据库的字段中
@Unique:该属性值必须在数据库中是唯一值
@Generated:编译后自动生成的构造函数、方法等的注释,提示构造函数、方法等不能被修改

四、创建数据库(数据库名)

1、一般都是在Application的子类中创建,例如:

public class BaseApplication extends Application {private static DaoSession daoSession;@Overridepublic void onCreate() {super.onCreate();//配置数据库setupDatabase();}/*** 配置数据库*/private void setupDatabase() {//创建数据库millet.db"DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "millet.db", null);//获取可写数据库SQLiteDatabase db = helper.getWritableDatabase();//获取数据库对象DaoMaster daoMaster = new DaoMaster(db);//获取Dao对象管理者daoSession = daoMaster.newSession();}public static DaoSession getDaoInstant() {return daoSession;}
}

可以发现,GreenDao已经将我们的数据库创建缩成几句话,代码会自动将Bean对象创建成表,不再是传统的手写SQL语句。这里的数据库创建只需要在Application中执行一次即可,这里对几个类进行解释

  • DevOpenHelper:创建SQLite数据库的SQLiteOpenHelper的具体实现
  • DaoMaster:GreenDao的顶级对象,作为数据库对象、用于创建表和删除表
  • DaoSession:管理所有的Dao对象,Dao对象中存在着增删改查等API
    由于我们已经创建好了DaoSession和Shop的Bean对象,编译后会自动生成我们的ShopDao对象,可通过DaoSession获得
ShopDao dao = daoSession.getShopDao();

五、在代码中使用

增删改查:

public class MilletDao {/*** 添加数据,如果有重复则覆盖** @param shop*/public static void insertLove(Shop shop) {BaseApplication.getDaoInstant().getShopDao().insertOrReplace(shop);}/*** 删除数据** @param id*/public static void deleteLove(long id) {BaseApplication.getDaoInstant().getShopDao().deleteByKey(id);}/*** 更新数据** @param shop*/public static void updateLove(Shop shop) {BaseApplication.getDaoInstant().getShopDao().update(shop);}/*** 查询条件为Type=TYPE_LOVE的数据** @return*/public static List<Shop> queryLove() {return BaseApplication.getDaoInstant().getShopDao().queryBuilder().where(ShopDao.Properties.Type.eq(Shop.TYPE_LOVE)).list();}/*** 查询全部数据*/public static List<Shop> queryAll() {return BaseApplication.getDaoInstant().getShopDao().loadAll();}}

效果很明显,GreenDao的封装更加短小精悍,语义明朗,下面对GreenDao中Dao对象其他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()查询限制当页个数
.limit()查询总个数
.count()修改单个数据
getShopDao().update(shop);修改多个数据
getShopDao().updateInTx(shopList);删除单个数据
getTABUserDao().delete(user);删除多个数据
getUserDao().deleteInTx(userList);删除数据ByKey
getTABUserDao().deleteByKey();

GreenDao的学习和使用相关推荐

  1. 那些年收藏的技术文章(一) CSDN篇

    #Android ##Android基础及相关机制 Android Context 上下文 你必须知道的一切 Android中子线程真的不能更新UI吗? Android基础和运行机制 Android任 ...

  2. 那些年收藏的技术文章(一)-CSDN篇

    Android Android基础及相关机制 Android View体系 Android坐标相关 Android事件机制及相关问题 Android官方组件 Android Service Andro ...

  3. GreenDao的简单学习(附带demo源码)

    先看效果图: 添加实体: 按条件查询实体: GreenDao 概述:     适用于Android的轻量级快速ORM框架,可将对象映射到SQLite数据库中,并且针对Andriod进行了高度的优化,g ...

  4. Android学习之GreenDao最全面的使用详解(搭建+入门使用+基本语法)

    简单介绍 greenDAO 是一款开源的面向 Android 的轻便.快捷的 ORM 框架,将 Java 对象映射到 SQLite 数据库中,我们操作数据库的时候,不在需要编写复杂的 SQL语句, 在 ...

  5. Java学习之注解Annotation实现原理

    前言: 最近学习了EventBus.BufferKinfe.GreenDao.Retrofit 等优秀开源框架,它们新版本无一另外的都使用到了注解的方式,我们使用在使用的时候也尝到不少好处,基于这种想 ...

  6. 国内优秀Android学习资源汇总全集

    本博文将基于https://github.com/bboyfeiyu/android-tech-frontier/tree/master/the-bad-guys 进行扩展和补充,欢迎各位朋友一起补充 ...

  7. 安卓GreenDao框架一些进阶用法整理(转)

    大致分为以下几个方面: 一些查询指令整理 使用SQL语句进行特殊查询 检测表字段是否存在 数据库升级 数据库表字段赋初始值 一.查询指令整理 1.链式执行的指令 return mDaoSession. ...

  8. Android 学习指南(2017版)

    Android 学习指南 不断有新人来询问如何学习Android,很多都是无从下手,没有任何概念.正好好久没写文章了,今天来整理一下Android学习大纲,同时也会附上部分学习资料,主要还是希望大家能 ...

  9. Android数据存储之GreenDao 3.0 详解

    前言: 今天一大早收到GreenDao 3.0 正式发布的消息,自从2014年接触GreenDao至今,项目中一直使用GreenDao框架处理数据库操作,本人使用数据库路线 Sqlite----> ...

  10. 一篇好文之Android数据库 GreenDao的完全解析

    数据库GreenDao.jpg 之前在开发过程中,数据库基本上会使用Litepal或者SQlite自己写,最近换新环境,公司原先使用的数据库就是GreenDao,在各种情况的作用下,准备了解下Gree ...

最新文章

  1. 诺康得NKD完成500万天使轮融资,专注于糖化学细胞治疗...
  2. 阿里AI再揽2员大将:挖角高通、360,年薪百万美元
  3. LeetCode 1257. 最小公共区域(最小公共祖先)
  4. 函数计算助力语雀构建稳定且安全的业务架构
  5. WPF应用程序启动顺序机制
  6. 【LeetCode】【数组】题号:*54,螺旋数组
  7. 【转】只有运用你的逻辑才能看懂其中的恐怖
  8. SNIFFER(嗅探器)-简介(zt)
  9. Java--->奥运五环
  10. android 上传图片视频教程,秒拍怎么上传长视频 秒拍APP拍长视频并上传图文教程...
  11. 平面设计入门新手需看技巧
  12. 玩客云刷armbian安装php环境_【2020.1.28】玩客云刷Armbian的那些坑
  13. 微软 Office 全家桶被 GPT-4 革新:Word 一键变成 PPT,打工人的春天来了!
  14. iOS Safari阅读模式分析过程
  15. 入网许可证_进网许可证、电信设备入网许可证详解!
  16. 研发新人如何快速熟悉新项目和业务
  17. dw常用标签_一个新人对于DW标签的理解
  18. 计算机网络笔记1 计算机网络概述
  19. 怎样优化Apache服务器的性能
  20. Alex Woodie:2019大数据预测

热门文章

  1. FRR BGP协议分析8 -- BGP 层3隧道 (2)
  2. freeSWITCH中动态加载模块
  3. 营销管理手册_从店长手册入手,推动营销管理大升级
  4. 【数据结构】进击的二叉查找树
  5. wcf 接收post数据_简单聊下HTTP中POST和GET请求本质区别
  6. dispatch作用 react_javascript – redux-react中的dispatch函数
  7. fastjson 序列化 不包括转义字符_fastjson漏洞复现
  8. linux nslookup 解析不到dns_内网智能DNS搭建
  9. 获得当月时间chuo_擅用GTD时间管理法,远离焦虑情绪,让你的工作、学习井然有序...
  10. python编程音乐播放器_python 开发在线音乐播放器-简易版