官网:http://greenrobot.org/greendao/features//
代码:https://github.com/greenrobot/greenDAO
简介:greenDAO是一个对象关系映射(ORM)的框架,能够提供一个接口通过操作对象的方式去操作关系型数据库,它能够让你操作数据库时更简单、更方便。
GreenDao 优点:
性能高,号称Android最快的关系型数据库
- 内存占用小
- 简洁易用的API
库文件比较小,小于100K,编译时间低,而且可以避免65K方法限制
支持数据库加密 greendao支持SQLCipher进行数据库加密
使用方法:
s1.项目的build.gradle文件追加:
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
s2.程序的build.gradle文件做如下修改:
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao'
android {
compileSdkVersion 25
buildToolsVersion "27.0.3"
defaultConfig {
applicationId "com.example.hufhu.act1"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
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:25.3.1'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
compile 'org.greenrobot:greendao:3.2.2' // add library
compile 'com.github.yuweiguocn:GreenDaoUpgradeHelper:v1.4.0'//数据库升级辅助
}
greendao {
schemaVersion 1//<--数据库的版本,用于升级时候进行更改
daoPackage 'com.ccl.greendao.gen'//这个是生成DAOs、DaoMaster、DaoSession代码保存的包名,默认为entities所在包名
targetGenDir 'src/main/java'//生成DAOs、DaoMaster、DaoSession的目录。默认为build/generated/source/greendao
}
s3.编写entity
@Entity
public class User {
@Id(autoincrement = true)
private Long id;
private String name;
private int age;
private int sex;
}
属性的相对应的get、set方法会自动生成
s4.GreenDaoManager.java
package com.ccl.greendao.db;
import com.ccl.greendao.gen.DaoMaster;
import com.ccl.greendao.gen.DaoSession;
/**
* Created by hufhu on 2018/3/12.
*/
public class GreenDaoManager {
// 数据库
private static final String DB_NAME = "greendaodb";
private static GreenDaoManager greenDaoManager;
private static DaoSession daoSession;
public static GreenDaoManager getInstance(){
if(null == greenDaoManager){
synchronized (GreenDaoManager.class){
if(null == greenDaoManager){
greenDaoManager = new GreenDaoManager();
}
}
}
return greenDaoManager;
}
public GreenDaoManager(){
DaoMaster.DevOpenHelper openHelper = new DaoMaster.DevOpenHelper(GreenApplication.getContext(),DB_NAME,null);
DaoMaster daoMaster = new DaoMaster(openHelper.getWritableDatabase());
daoSession = daoMaster.newSession();
}
public static DaoSession getDaoSession(){
return daoSession;
}
}
GreenApplication.java
public class GreenApplication extends Application {
private static Context context;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
// 单例初期化 设置数据库
GreenDaoManager.getInstance();
}
public static Context getContext() {
return context;
}
}
将GreenApplication配置在AndroidManifest.xml文件中<application android:name=".GreenApplication">
s5.GreenDao的增删改查操作
/**
* greenDao 的增删改查
* @param view
*/
public void greenDaoAdd(View view) {
Log.i("add","greenadd");
UserDao userDao = GreenDaoManager.getDaoSession().getUserDao();
User user = new User();
user.setName("name2");
user.setAge(12);
user.setSex(0);
userDao.insert(user);
}
public void greenDaoDel(View view) {
}
public void greenDaoUpd(View view) {
UserDao userDao = GreenDaoManager.getDaoSession().getUserDao();
User user = userDao.queryBuilder().where(UserDao.Properties.Name.eq("name2")).unique();
Log.i("user:", user.getId() + ";" + user.getName() + ";" + user.getAge() + ";" + user.getSex());
user.setAge(2);
user.setSex(1);
userDao.update(user);
Log.i("user:", user.getId() + ";" + user.getName() + ";" + user.getAge() + ";" + user.getSex());
}
public void greenDaoQuery(View view) {
UserDao userDao = GreenDaoManager.getDaoSession().getUserDao();
//方法一
List<User> userList = userDao.loadAll();
//方法二
//List<User> userList = userDao.queryBuilder().list();
//方法三 惰性加载
//List<User> userList = userDao.queryBuilder().listLazy();
Log.i("log", "***********start");
for (User user : userList) {
Log.i("user:", user.getId() + ";" + user.getName() + ";" + user.getAge() + ";" + user.getSex());
}
Log.i("log", "***********start");
}
注解:
(1)@Entity 实体标识
@nameInDb 在数据库中的名字,如不写则为实体中类名
@indexes 索引
@createInDb 是否创建表,默认为true,false时不创建
@schema 指定架构名称为实体
@active 无论是更新生成都刷新
(2)@Id 每条数据对应的位置,必写项
(3)@Property(nameInDb = "") 表示该属性将作为表的一个字段,其中nameInDb属性值是在数据库中对应的字段名称,可以自定义字段名,例如可以定一个跟实体对象字段不一样的字段名
(4)@NotNull 不为null
(5)@Unique 唯一约束 该属性值必须在数据库中是唯一值
(6)@ToMany 一对多
(7)@OrderBy 排序
(8)@ToOne 一对一 关系表
(9)@Transient 不保存于数据库
(10)@generated 由greendao产生的构造函数或方法