GreenDao 介绍:
greenDAO是一个对象关系映射(ORM)的框架,能够提供一个接口通过操作对象的方式去操作关系型数据库,它能够让你操作数据库时更简单、更方便。
官网地址:http://greenrobot.org/greendao/
github:https://github.com/greenrobot/greenDAO
GreenDao3.2使用方法
1.在项目的build.gradle添加如下配置
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.0'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'//greendao
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
2.在app/build.gradle添加如下代码
apply plugin: 'org.greenrobot.greendao'//greendao
greendao {
schemaVersion 1//数据库schema版本号,通过*OpenHelpers迁移数据,schema改变值增加。默认为1
daoPackage 'com.bupt.greeddaotest.dao'//生成DAOs、DaoMaster、DaoSession的包名。默认为entities所在包名。
targetGenDir 'src/main/java'//生成DAOs、DaoMaster、DaoSession的目录。默认为build/generated/source/greendao
}
dependencies {
compile 'org.greenrobot:greendao:3.2.0'
}
3.新建实体
@Entity
public class User {
@Id(autoincrement = true)
private Long id;
@NotNull
private String username;
private int age;
private String sex;
private String address;
}
其中
@Entity 用于标识这是一个需要Greendao帮我们生成代码的bean
@Id 标明主键,括号里可以指定是否自增
@NotNull 非空
此时编译一下自动生成DaoMaster 、DaoSession、Dao,如图所示 :
4.数据库版本升级
数据库版本升级使用了辅助库GreenDaoUpgradeHelper
github:https://github.com/yuweiguocn/GreenDaoUpgradeHelper
1)在项目的build.gradle添加
allprojects {
repositories {
jcenter()
maven { url "https://jitpack.io" }//使用数据库升级辅助GreenDaoUpgradeHelper时添加
}
}
2)在app/build.gradle添加
dependencies {
// 使用数据库升级辅助GreenDaoUpgradeHelper时添加
compile 'com.github.yuweiguocn:GreenDaoUpgradeHelper:v1.3.0'
}
3)新建如下类
public class MySQLiteOpenHelper extends DaoMaster.OpenHelper {
public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
super(context, name, factory);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
super.onUpgrade(db, oldVersion, newVersion);
MigrationHelper.migrate(db,UserDao.class);//版本升级
}
}
一个简单的实例
1)在自定义application里面设置数据库
public class MeApplication extends Application {
private static MeApplication application;
private MySQLiteOpenHelper openHelper;
private Database db;
private DaoMaster daoMaster;
private DaoSession daoSession;
public static String database_name = "record-db";
@Override
public void onCreate() {
super.onCreate();
application = this;
setDatabase();
}
private void setDatabase() {
openHelper = new MySQLiteOpenHelper(this, database_name, null);
db = openHelper.getWritableDatabase();//获取可写数据库
daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
}
public static MeApplication getMeApplication(){
return application;
}
public DaoSession getDaoSession() {
return daoSession;
}
public Database getDb() {
return db;
}
}
2)插入数据
/**
* 插入一条记录
*
*/
public void insertUser(UserDao userDao,User user) {;
userDao.insert(user);
}
/**
* 插入用户集合
*
*/
public void insertUsers(UserDao userDao,List<User> users) {
if (users == null || users.isEmpty()) {
return;
}
userDao.insertInTx(users);
}
3)删除数据
/**
* 删除一条记录
*
*/
public void deleteUser(UserDao userDao,User user) {
userDao.delete(user);
}
/**
* 删除用户集合
*
*/
public void deleteUsers(UserDao userDao,List<User> users) {
if (users == null || users.isEmpty()) {
return;
}
userDao.deleteInTx(users);
}
4)更新数据
/**
* 更新一条记录
*
*/
public void updateUser(UserDao userDao,User user) {
userDao.update(user);
}
/**
* 更新用户集合
*
*/
public void updateUsers(UserDao userDao,List<User> users) {
if (users == null || users.isEmpty()) {
return;
}
userDao.updateInTx(users);
}
5)查询数据
/**
* 查询用户列表
*/
public List<User> queryUsers(UserDao userDao) {
List<User> list = userDao.queryBuilder().list();
return list;
}
/**
* 查询用户列表
*/
public List<User> queryUsers(UserDao userDao,int age) {
//按照年龄从小到大排列
List<User> list = userDao.queryBuilder().where(UserDao.Properties.Age.gt(age)).orderAsc(UserDao.Properties.Age).list();
return list;
}