本人使用greendao一年,现在公司依然使用该框架,网上东抄西凑,资料杂七杂八,我顺便就写编博客给大家一起看看。现在我也在使用realm,realm也是非常不错的框架,过些天会再给大家写一篇奉献给想学realm的朋友们。
官方网站:http://greenrobot.org/greendao
官方github网址:https://github.com/greenrobot/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您可以使用它。 有看吗 数据库加密文档 获取详细信息。
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'
}
}
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'
}
@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;
}
首先建立一个全局的单例,这里直接放在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:[email protected]
* 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);
getUserDao().insertInTx(userList);
getUserDao().insertOrReplaceInTx(userList);
2. 查询(只稍加列举,还有很多查询情况)
全部
List
或
List
单个条件
.where() .whereOr()
.where(, , ,) .whereOr(, , ,)
从大到小.orderDesc() 从小到大.orderAsc()
.limit()
.count()
List list;
QueryBuilder 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);
getTABUserDao().deleteByKey();