GreenDao

一、GreenDao 简介

greenDAO 是一款开源的面向 Android 的轻便、快捷的 ORM 框架,将 Java 对象映射到 SQLite   数据库中,我们操作数据库的时候,不在需要编写复杂的 SQL语句, 在性能方面,greenDAO 针对 Android 进行了高度优化,   最小的内存开销 、依赖体积小 同时还是支持数据库加密。

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


二、GreenDao 特征:

1、对象映射( ORM)

greenDAO 是ORM 框架,可以非常便捷的将Java 对象映射到 SQLite  数据库中保存。

2、高性能

ORM 框架有很多,比较著名的有 OrmLite , ActiveAndroid 等,性能也不一样,下图是 GreenDao 官方给出的性能对比。

3、支持加密

GreenDao  是支持加密的,可以安全的保存用户数据。

4、轻量级

GreenDao  核心库小于100k ,所以我们并不会担心添加 GreenDao  后 APK 大小会变的是否庞大。

5、支持 protocol buffer(protobuf) 协议

GreenDao  支持 protocol buffer(protobuf) 协议数据的直接存储,如果你通过 protobuf 协议与服务器交互,将不需要任何的映射。

6,代码生成

greenDAO 会根据配置信息自动生成核心管理类以及 DAO 对象

7,开源

greenDAO  是开源的,我们可以在github 上下载源码,学习。github 地址:https://github.com/greenrobot/greenDAO


三、核心类介绍

DaoMaster:

使用 greenDAO 的入口点。DaoMaster 负责管理数据库对象(SQLiteDatabase)和 DAO 类(对象),我们可以通过它内部类 OpenHelper 和 DevOpenHelper SQLiteOpenHelper 创建不同模式的 SQLite 数据库。

DaoSession :

管理指定模式下的所有 DAO 对象,DaoSession提供了一些通用的持久性方法比如插入、负载、更新、更新和删除实体。

XxxDAO :

每个实体类 greenDAO  多会生成一个与之对应DAO对象,如:User 实体,则会生成一个一个UserDao 类

Entities

可持久化对象。通常, 实体对象代表一个数据库行使用标准 Java 属性(如一个POJO 或 JavaBean )。

核心类之间的关系


四、 集成 GreenDAO

a、设置仓库与插件(Project: build.gradle)
 
 
  1. buildscript {
  2.     repositories {
  3.         jcenter()
  4.         mavenCentral() // add repository
  5.     }
  6.     dependencies {
  7.         classpath 'com.android.tools.build:gradle:2.3.2'
  8.         classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
  9.     }
  10. }
b、 配置依赖 ( Module:app  build.gradle  )
 
 
  1. apply plugin: 'com.android.application'
  2. apply plugin: 'org.greenrobot.greendao' // apply plugin
  3.  
  4. dependencies {
  5.     compile 'org.greenrobot:greendao:3.2.2' // add library
  6.  
  7.     // This is only needed if you want to use encrypted databases
  8.     compile 'net.zetetic:android-database-sqlcipher:3.5.6'//加密库依赖(可选项)
  9. }
c、 配置数据库相关信息 ( Module:app  build.gradle  )
 
 
  1. greendao {
  2.     schemaVersion 1 //数据库版本号
  3.     daoPackage 'com.speedystone.greendaodemo.db'// 设置DaoMaster、DaoSession、Dao 包名
  4.     targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
  5. }
d、点击 : Sync Project with Gradle Files 按钮,同步一下工程 , 配置完成

五、快速入门

1, 我们写一个简单的实体类(User),测试一下

 
 
  1. package com.speedystone.greendaodemo.model;
  2.  
  3. import org.greenrobot.greendao.annotation.Entity;
  4. import org.greenrobot.greendao.annotation.Id;
  5.  
  6. /**
  7.  * Created by Speedy on 2017/6/30.
  8.  */
  9. @Entity
  10. public class User {
  11.  
  12.     @Id
  13.     private long id;
  14.  
  15.     private String name;
  16.  
  17.     private int age;
  18.  
  19.     //此处省略了getter,setter 方法
  20. }

2、点击 Make Project(或者 Make Moudle 'App') 编译一下工程 。如果配置正确,会在配置的包目录下自动会生成 DaoMaster,DaoSession 和 UserDao 类 。

3,初始化 GreenDao ( 通常初始化代码写在我们的 Application 类中)

4,获取 UserDao

 
 
  1.   MyApp myApp = (MyApp) getApplication();
  2.   DaoSession daoSession =  myApp.getDaoSession();
  3.   UserDao userDao = daoSession.getUserDao();

5, 保存记录

 
 
  1.  User user = new User();
  2.  user.setUserId(1);
  3.  user.setName("小明");
  4.  user.setAge(16);
  5.  
  6.   userDao.insert(user);
 
 
  1.  User user = new User();
  2.  user.setUserId(1);
  3.  user.setName("小明");
  4.  user.setAge(16);
  5.  
  6.  //插入或者替换
  7.  userDao.insertOrReplace(user);

5, 删除记录

 
 
  1. public void delete(User user){
  2.     userDao.delete(user);
  3. }

或者

 
 
  1. public void deleteByUserId(long userid){
  2.      userDao.deleteByKey(1L);
  3. }

6,更新记录

 
 
  1. public void update(User user){
  2.     userDao.update(user);
  3. }

7,查询记录

 
 
  1. public List query(){
  2.     return userDao.loadAll();// 查询所有记录
  3. }
 
 
  1. public User query2(){
  2.         return userDao.loadByRowId(1);//根据ID查询
  3. }
 
 
  1. public List query2(){
  2.         return userDao.queryRaw("where AGE>?","10");//查询年龄大于10的用户
  3. }
 
 
  1. //查询年龄大于10的用户
  2. public List query4(){
  3.     QueryBuilder builder = userDao.queryBuilder();
  4.     return  builder.where(UserDao.Properties.Age.gt(10)).build().list();
  5. }

六、注解详解

@Entity  

表明这个实体类会在数据库中生成一个与之相对应的表

属性:

  • schema:告知GreenDao当前实体属于哪个 schema

  • schema active:标记一个实体处于活跃状态,活动实体有更新、删除和刷新方法

  • nameInDb:在数据库中使用的别名,默认使用的是实体的类名,

  • indexes:定义索引,可以跨越多个列

  • createInDb:标记创建数据库表(默认:true)

  • generateConstructors  自动创建全参构造方法(同时会生成一个无参构造方法)(默认:true)

  • generateGettersSetters  自动生成 getters and setters 方法(默认:true)

 
 
  1. @Entity(
  2.         schema = "myschema",
  3.         active = true,
  4.         nameInDb = "AWESOME_USERS"
  5.         indexes = {
  6.                 @Index(value = "name DESC", unique = true)
  7.         },
  8.         createInDb = true,
  9.         generateConstructors = false,
  10.         generateGettersSetters = true
  11. )
  12. public class User {
  13.   ...
  14. }

@Id

对应数据表中的 Id 字段

@Index

使用@Index作为一个属性来创建一个索引,默认是使用字段名

 
 
  1. @Entity
  2. public class User {
  3.     @Id 
  4.     private Long id;
  5.  
  6.     @Index(unique = true)
  7.     private String name;
  8. }

@Property

设置一个非默认关系映射所对应的列名,默认是使用字段名,例如:@Property(nameInDb = "userName")

@NotNull  

设置数据库表当前列不能为空

@Transient

添加此标记后不会生成数据库表的列

@Unique

表名该属性在数据库中只能有唯一值

 
 
  1. @Entity
  2. public class User {
  3.     @Id 
  4.     private Long id;
  5.     @Unique
  6.     private String name;
  7. }

@ToOne

表示一对一关系

 
 
  1. @Entity
  2. public class Order {
  3.  
  4.     @Id private Long id;
  5.  
  6.     private long customerId;
  7.  
  8.     @ToOne(joinProperty = "customerId")
  9.     private Customer customer;
  10. }
  11.  
  12. @Entity
  13. public class Customer {
  14.     @Id 
  15.     private Long id;
  16. }

@OrderBy

更加某一字段排序 ,例如:@OrderBy("date ASC")

@ToMany

定义一对多个实体对象的关系

 
 
  1. @Entity
  2. public class Customer {
  3.     @Id private Long id;
  4.  
  5.     @ToMany(referencedJoinProperty = "customerId")
  6.     @OrderBy("date ASC")
  7.     private List orders;
  8. }
  9.  
  10. @Entity
  11. public class Order {
  12.     @Id private Long id;
  13.     private Date date;
  14.     private long customerId;
  15. }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值