Greendao 3.2一步步教你到使用,看完必会(附Demo)

时间:2022-10-02 03:23:28

本人使用greendao一年,现在公司依然使用该框架,网上东抄西凑,资料杂七杂八,我顺便就写编博客给大家一起看看。现在我也在使用realm,realm也是非常不错的框架,过些天会再给大家写一篇奉献给想学realm的朋友们。

官方网站:http://greenrobot.org/greendao
官方github网址:https://github.com/greenrobot/greenDAO

首先奉上官方对greendao的介绍(工具翻译而来):

greenDAO特性 对象/关系映射(ORM)

greenDAO Android ORMgreenDAO的本质是提供一个面向对象的接口数据存储在关系数据库SQLite。
数据模型定义,greenDAO将创建Java数据对象(实体)和DAOs( 数据访问对象 )。 这将节省你很多无聊的代码,只是来回移动数据。
除此之外,greenDAO报价 一些先进的ORM特性 像一个会话缓存,立即加载和活跃的实体。

性能

orm我们知道,greenDAO是最快的。 关于性能greenDAO不做任何妥协。 数据库用于存储大量的数据,因此速度很重要。
使用greenDAO,大多数实体可以插入、更新和加载速度 每秒几千实体 。

我们有信心在greenDAO性能和邀请你来比较greenDAO orm。 我们 开源的基准 完全透明。

greenDAO插入和更新实体快2倍左右,并加载实体比ORMLite快4倍左右。 典型的应用程序加载速度是最相关的。
除了greenDAO的高性能核心功能,如一个会话缓存和智能立即加载技术给额外的性能提升。

加密支持

您可以使用与标准greenDAO SQLite,嵌入在Android,或与SQLCipher您可以使用它。 有看吗 数据库加密文档 获取详细信息。

官方说的已经非常强大了,我们还有什么理由不用它呢?(废话不多说,下面开始)

1.Project.gradle配置

buildscript {
repositories {
mavenCentral()
}

dependencies {
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'
}

}

如图
Greendao 3.2一步步教你到使用,看完必会(附Demo)

2. Model.gradle配置

apply plugin: 'org.greenrobot.greendao'

dependencies {
compile 'org.greenrobot:greendao:3.2.0'
}

我的完整配置:

apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao'
android {
compileSdkVersion 24
buildToolsVersion "24.0.3"

defaultConfig {
applicationId "com.app.example"
minSdkVersion 14
targetSdkVersion 24
versionCode 1
versionName "1.0"

testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

}
greendao {
schemaVersion 1
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:24.2.0'
testCompile 'junit:junit:4.12'
compile 'org.greenrobot:greendao:3.2.0'
}

3.写greendao实体类,运行时会自动创建get,set等方法

@Entity
public class User {

@Id(autoincrement = true)
private Long id;
@Unique()
private String name;
private String age;
private String passWord;
private String email;
private String phoneNumber;
private String description;
}

3.简单的增删改查

首先建立一个全局的单例,这里直接放在Application中,记得在manifest中配置Application android:name=”.App”(例如App.class)

package com.app;

import android.app.Application;
import android.daase.sqlite.SQLiteDaase;

import greendao.DaoMaster;
import greendao.DaoSession;

/**
* Author:YangBin
* Time:2016/10/31.
* Email:1250211588@qq.com
* explain:
*/


public class App extends Application{
private static DaoSession daoSession;

@Override
public void onCreate() {
super.onCreate();
setupDaase();
}

private void setupDaase() {
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "db-name", null);
SQLiteDaase db = helper.getWrileDaase();
DaoMaster daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
}

public static DaoSession getDaoInstant() {
return daoSession;
}
}

以下getUserDao()都是App.getDaoSession().getUserDao()

1. 增加(修改也可以用,因为有唯一主键)

  • 单个
    getUserDao().insert(T entity);

    getUserDao().insertOrReplace(user);
  • list多个
    getUserDao().insertInTx(userList);

    getUserDao().insertOrReplaceInTx(userList);

2. 查询(只稍加列举,还有很多查询情况)

  • 全部
    List<User> list = getUserDao().loadAll();

    List<User> list = getUserDao().queryBuilder().list();

  • 单个条件
    .where() .whereOr()

  • 多个条件
    .where(, , ,) .whereOr(, , ,)
  • 排序
    从大到小.orderDesc() 从小到大.orderAsc()
  • 限制当页个数
    .limit()
  • 总个数
  • .count()
  • 例如
        List<User> list;
QueryBuilder<User> qb = getUserDao().queryBuilder()
.where(UserDao.Properties.Name.isNotNull(),
UserDao.Properties.Name.eq("XiaoMing"),
UserDao.Properties.Age.between(20, 30),
UserDao.Properties.PhoneNumber.like("177"))
.whereOr(UserDao.Properties.Age.between(20, 30),
UserDao.Properties.PhoneNumber.like("177"))
.limit(10)
.orderDesc(UserDao.Properties.Name);
long count = qb.count();
list = qb.list();

3. 修改

  • 单个
    getUserDao().update(user);
  • 多个
    getUserDao().updateInTx(userList);

4. 删除

  • 单个
    getTABUserDao().delete(user);
  • 多个
    getUserDao().deleteInTx(userList);
  • ByKey
    getTABUserDao().deleteByKey();