一、GreenDao 简介

greenDAO 是一款开源的面向 Android 的轻便、快捷的 ORM 框架,将 Java 对象映射到 SQLite

数据库中,我们操作数据库的时候,不在需要编写复杂的 SQL语句, 在性能方面,greenDAO 针对 Android 进行了高度优化,

最小的内存开销 、依赖体积小 同时还是支持数据库加密。

二、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)buildscript {

repositories {

jcenter()

mavenCentral() // add repository

}

dependencies {

classpath 'com.android.tools.build:gradle:2.3.2'

classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin

}

}

b、 配置依赖 ( Module:app  build.gradle  )apply plugin: 'com.android.application'

apply plugin: 'org.greenrobot.greendao' // apply plugin

dependencies {

compile 'org.greenrobot:greendao:3.2.2' // add library

// This is only needed if you want to use encrypted databases

compile 'net.zetetic:android-database-sqlcipher:3.5.6'//加密库依赖(可选项)

}

c、 配置数据库相关信息 ( Module:app  build.gradle  )greendao {

schemaVersion 1 //数据库版本号

daoPackage 'com.speedystone.greendaodemo.db'// 设置DaoMaster、DaoSession、Dao 包名

targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录

}

d、点击 : Sync Project with Gradle Files 按钮,同步一下工程 , 配置完成

五、快速入门

1, 我们写一个简单的实体类(User),测试一下package com.speedystone.greendaodemo.model;

import org.greenrobot.greendao.annotation.Entity;

import org.greenrobot.greendao.annotation.Id;

/**

* Created by Speedy on 2017/6/30.

*/

@Entity

public class User {

@Id

private long id;

private String name;

private int age;

//此处省略了getter,setter 方法

}

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

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

4,获取 UserDaoMyApp myApp = (MyApp) getApplication();

DaoSession daoSession =  myApp.getDaoSession();

UserDao userDao = daoSession.getUserDao();

5, 保存记录User user = new User();

user.setUserId(1);

user.setName("小明");

user.setAge(16);

userDao.insert(user);User user = new User();

user.setUserId(1);

user.setName("小明");

user.setAge(16);

//插入或者替换

userDao.insertOrReplace(user);

5, 删除记录public void delete(User user){

userDao.delete(user);

}

或者public void deleteByUserId(long userid){

userDao.deleteByKey(1L);

}

6,更新记录public void update(User user){

userDao.update(user);

}

7,查询记录public List query(){

return userDao.loadAll();// 查询所有记录

}public User query2(){

return userDao.loadByRowId(1);//根据ID查询

}public List query2(){

return userDao.queryRaw("where AGE>?","10");//查询年龄大于10的用户

}//查询年龄大于10的用户

public List query4(){

QueryBuilder builder = userDao.queryBuilder();

return  builder.where(UserDao.Properties.Age.gt(10)).build().list();

}

六、注解详解

@Entity

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

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

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

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

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

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

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

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

schema = "myschema",

active = true,

nameInDb = "AWESOME_USERS",

indexes = {

@Index(value = "name DESC", unique = true)

},

createInDb = true,

generateConstructors = false,

generateGettersSetters = true

)

public class User {

...

}

@Id

对应数据表中的 Id 字段

@Index

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

public class User {

@Id

private Long id;

@Index(unique = true)

private String name;

}

@Property

设置一个非默认关系映射所对应的列名,默认是使用字段名,例�[email protected](nameInDb = "userName")

@NotNull

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

@Transient

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

@Unique

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

public class User {

@Id

private Long id;

@Unique

private String name;

}

@ToOne

表示一对一关系@Entity

public class Order {

@Id private Long id;

private long customerId;

@ToOne(joinProperty = "customerId")

private Customer customer;

}

@Entity

public class Customer {

@Id

private Long id;

}

@OrderBy

更加某一字段排序 ,例�[email protected]("date ASC")

@ToMany

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

public class Customer {

@Id private Long id;

@ToMany(referencedJoinProperty = "customerId")

@OrderBy("date ASC")

private List orders;

}

@Entity

public class Order {

@Id private Long id;

private Date date;

private long customerId;

}

android 注解创建对象,Android ORM 框架:GreenDao 使用详解相关推荐

  1. android 连接mysql orm_Android ORM框架 GreenDao 的使用详解

    一.前言 关于 Android 中常用的数据存储方式我们前面已经讲了 Sp 存储和文件存储,但是对于数据量比较大,并且结构复杂的数据我们想要存储只能通过数据库进行处理,Android 中提供了一个 S ...

  2. [Android Pro] 终极组件化框架项目方案详解

    cp from : https://blog.csdn.net/pochenpiji159/article/details/78660844 前言 本文所讲的组件化案例是基于自己开源的组件化框架项目 ...

  3. Android ORM框架GreenDao用法

    Android ORM框架GreenDao用法 0 简介 android 上的ORM框架主要有两个:ormlite 和 GreenDAO,本篇主要介绍GreenDao的用法,原因是GreenDAO的速 ...

  4. Android ORM框架 GreenDao 的使用详解

    一.前言 关于 Android 中常用的数据存储方式我们前面已经讲了 Sp 存储 和 文件存储,但是对于数据量比较大,并且结构复杂的数据我们想要存储只能通过数据库进行处理,Android 中提供了一个 ...

  5. androidentity什么用_Android ORM 框架:GreenDao 使用详解(进阶篇)

    前言 在 Android ORM 框架:GreenDao 使用详解(基础篇) 中,我们了解了 GreenDao 的基本使用,本文我们将深入讲解 GreenDao 的使用 . 一.复杂表结构 a, 使用 ...

  6. Android系统(96)---Android 数据交换解析框架Gson使用详解

    Android 数据交换解析框架Gson使用详解 Json 是一种文本形式的数据交换格式,比 xml 更为轻量.Json 的解析和生成的方式很多,在 Android 平台上最常用的类库有 Gson 和 ...

  7. Android自动化大讲堂34--终极自动化框架UIAutomator使用详解

    <深入理解Android自动化测试> 又双叒叕重印咯!!! 无以为报,只能改版得更漂亮一点来答谢各位的厚爱! 好了,废话少说,咱们开始吧! 终极自动化框架UIAutomator使用详解 注 ...

  8. Android四大组件之bindService源码实现详解

        Android四大组件之bindService源码实现详解 Android四大组件源码实现详解系列博客目录: Android应用进程创建流程大揭秘 Android四大组件之bindServic ...

  9. [免费专栏] Android安全之数据存储与数据安全「详解」

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...

  10. android应用市场点击下载APK安装详解

    Android系统启动篇 1,<android系统启动流程简介> 2,<android init进程启动流程> 3,<android zygote进程启动流程> 4 ...

最新文章

  1. maven开发mybatis 让*.xml 拷贝到classes目录下
  2. 信阳哪些技校有学计算机的,2018年信阳十大技校排名 排名前十的学校有哪些
  3. wxpython应用程序对象与顶级窗口_wxPython--学习笔记
  4. 小计C++中的引用和vector
  5. 2021牛客多校6 - Gambling Monster(分治FWT优化期望dp)
  6. solr 配置中文分词器
  7. IDEA配置 及 快捷键
  8. 用标号跳出当前多重嵌套循环是否继续执行循环_在Java中如何跳出当前的多重嵌套循环?...
  9. 在JavaScript中解析查询字符串[重复]
  10. 利用c51进行数模转换并在液晶屏上显示_7.0寸tft触摸液晶屏可满足不同操作需求...
  11. PGM:基于模板的表示
  12. iOS 指纹识别/人脸识别登录(ECDSA 加签)
  13. 2019426 SPSS入门学习
  14. photoshop制作ico图标
  15. java操作Excel表格使用EasyExcel
  16. android studio如何多moudle依赖同一个gradle配置
  17. 研报精选230215
  18. [已解决]“TypeError: Cannot read property ‘xxx‘ of undefined“报错情况分析
  19. 百度主动推送怎么用?
  20. 人脸识别(一)调用face++实现人脸检测

热门文章

  1. [pl-slam] 几个重要的参数属性
  2. 第三章 动态规划-基于模型的RL-强化学习理论学习与代码实现(强化学习导论第二版)
  3. MATLAB 图像处理 灰度图 将图像中某一行或者某一列的灰度值 绘制成一条曲线
  4. Python因数分解
  5. 【LeetCode】【字符串】题号:*481. 神奇字符串
  6. GIS案例练习-----------第六天
  7. listview 加载的时候报java.lang.IllegalArgumentException: column ‘_id’ does not exist 错误
  8. VC6.0无法进入调试
  9. Java虚拟机优化在哪里,锁在Java虚拟机中的实现和优化
  10. JavaEE学习04--requestresponse