本人使用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'
}
}
如图
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();