Android 开发Android开发经验谈Android技术知识

GreenDao

2019-02-28  本文已影响1人  BugFree张瑞

一、GreenDao 简介

GreenDao原理图

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

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

greenDAO GitHub 源码地址:greenrobot/greenDAO

二、GreenDao 特征

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

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

3、性能
所有的ORM的,greenDAO是最快的。greenDAO不作性能方面任何妥协。

三、核心类介绍

1、DaoMaster:

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

2、DaoSession :

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

3、XxxDAO :

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

4、Entities:

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

核心类之间关系

四、集成 GreenDao

a、设置仓库与插件(Project: build.gradle)

buildscript {
    repositories {
        jcenter()
        mavenCentral() // add repository
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.3'
        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.example.zhangruirui.greendao' // 设置 DaoMaster、DaoSession、Dao 包名
    targetGenDir 'src/main/java' // 设置 DaoMaster、DaoSession、Dao 目录

五、实战

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

package com.example.zhangruirui;

import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Generated;
import org.greenrobot.greendao.annotation.Id;

@Entity
public class User {

  @Id
  private long id;

  private String name;

  private int age;

  @Generated(hash = 446251977)
  public User(long id, String name, int age) {
    this.id = id;
    this.name = name;
    this.age = age;
  }

  @Generated(hash = 586692638)
  public User() {
  }

  public long getId() {
    return id;
  }

  public void setId(long id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public int getAge() {
    return age;
  }

  public void setAge(int age) {
    this.age = age;
  }
}

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


编译之后的结果图

3、获取 UserDao 对数据库表进行 CRUD 操作即可

六、注解

@Entity

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

@Id

对应数据表中的 Id 字段

@Transient

添加此标记后不会生成数据库表的列,仅仅作为一个普通的java类字段,用来临时存储数据的,不会被持久化

@Unique

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

上一篇 下一篇

猜你喜欢

热点阅读