配置:
1.在项目gradle中加入greenDao插件:
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0'
}
2.在APP的gradle顶部加入插件:
apply plugin: 'org.greenrobot.greendao'
新建与android同级的块,配置报名和gen的路径:
greendao {
schemaVersion 1
daoPackage 'sdu.edu.cn.utribe.gen'
targetGenDir 'src/main/java'
}
这样指明之后框架生成的gen文件夹会出现在java下面。注意daoPackage是你自己的包名。
依赖greenDao和他的生成器:
compile 'org.greenrobot:greendao:3.0.1'
compile 'org.greenrobot:greendao-generator:3.0.0'
3.在Application中进行初始化,封装在下面这个方法里:
维护几个变量:
private DaoMaster.DevOpenHelper mHelper;
private SQLiteDatabase db;
private DaoMaster mDaoMaster;
private DaoSession mDaoSession;
初始化并给变量赋值:
**
* 设置greenDao
*/
private void setDatabase() {
// 通过 DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的 SQLiteOpenHelper 对象。
// 可能你已经注意到了,你并不需要去编写「CREATE TABLE」这样的 SQL 语句,因为 greenDAO 已经帮你做了。
// 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。
// 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。
mHelper = new DaoMaster.DevOpenHelper(this, "notes-db", null);
db = mHelper.getWritableDatabase();
// 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。
mDaoMaster = new DaoMaster(db);
mDaoSession = mDaoMaster.newSession();
}
public DaoSession getDaoSession() {
return mDaoSession;
}
public SQLiteDatabase getDb() {
return db;
}
onCreate调用setDatabase即可。
另外,Application需要采用单例模式获取实例,进而获取DaoSession
使用:将一个数据类(只要有变量字段即可,别的都会自动生成)用@Entity标注后,rebuild,框架会在gen文件夹下生成这个类的Dao(如Person会生成PersonDao),对一张表的增删改查就是通过这个Dao的实例实现的。
1.获取
.用过单例Application获取DaoSession,进而获取Dao单例。:
PersonDao dao=MyApplication.getApp().getDaoSession().getPersonDao();
获取到这个Dao实例之后就可以使用它对数据类对应的单表进行增删改查了。
增加数据:
dao.insert(new Person("name"));
查找数据:
List<User> userList = userDao.queryBuilder()
.where(UserDao.Properties.Id.notEq(999))
.orderAsc(UserDao.Properties.Id)
.limit(5)
.build().list();
用where叠加查询条件,最后的list将查询结果作为List返回,与之对应的是unique,只返回一条数据,也就是一个对象
删除数据(先找到目标数据再删除):
User findUser = userDao.queryBuilder().where(UserDao.Properties.Name.eq("wyk")).build().unique();
dao.delete(findUser);
也可以用deleteByKey传入主键的值来删除特定项。
修改数据(先找到目标数据,调用其set方法,然后用dao更新):
User findUser = userDao.queryBuilder().where(UserDao.Properties.Name.eq("wyk")).build().unique();
if(findUser != null) {
findUser.setName(newName);
userDao.update(findUser);
}