基本认识:
GreenDao是GreenRobot开源的ORM数据库。
主要有几个特点:
1、高性能。
2、易于使用的强大API。
3、最小的内存消耗。
4、库大小很小(<100kb)
5、支持数据库加密,确保用户数据安全(人脸数据核心问题)
在使用的过程中,主要有三个核心类:
1、DaoMaster:DaoMaster负责保存数据库对象(SQLiteDatabase)并且负责管理特定模式的DAO类。存在内部类OpenHelper和DevOpenHelper是SQLiteOpenHelper的实现,在SQLite数据库中创建模式。
2、DaoSession:管理特定模式的所有可用DAO对象,通过getter方法获取某个对象。同时提供一些通用的持久性方法,如实体的增删改查。
3、XXXDao:数据访问对象(DAO)持久存在并查询实体。对于每个实体,greenDAO生成DAO。它具有比DaoSession更多的持久性方法,例如:count,loadAll和insertInTx。
使用流程:
前期配置:
1、在项目的build.gradle文件中添加插件路径:
2、在Module目录下添加依赖:
3、在Module目录下配置对应的dao:
配置完成,开始编译。
开始使用:
1、创建实体类:
User:
@Entity // 使用此注解,GreenDao会自动识别后生成对应的Dao实体类
public class User {
// 唯一主键,要求唯一主键的元素必须为Long类型
@Id(autoincrement = true)
private Long id;
private String name;
private String location;
private String sex;
}
在进行Build之后,可以看到在设置的dao文件夹下生成三个核心类:
2、初始化GreenDao:
一般来说可以在项目的主Application中进行创建GreenDAo实例。创建的代码:
/**
* 初始化GreenDao,直接在Application中进行初始化操作
*/
private void initGreenDao() {
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "test.db");
SQLiteDatabase db = helper.getWritableDatabase();
DaoMaster daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
}
private DaoSession daoSession;
public DaoSession getDaoSession() {
return daoSession;
}
运行之后,可以看到我们的数据库文件已经创建成功:
开始增删改查:
1、增加数据:
通过DaoSession的insert方法来进行插入:
public void addUsers() {
// 获取对应的DaoSession,这里本地定义了一个gerDaoSession方法,因此可以使用this获得,一般要放在Application中获得
DaoSession daoSession = this.getDaoSession();
for (int i = 0; i < 10; i ++) {
User user = new User();
user.setName("张三" + i);
user.setSex(i % 2 == 0 ? "男" : "女");
user.setLocation("广东");
daoSession.insert(user);
}
}
可以看到数据创建成功:
2、删除数据:
删除单个数据:
public void delete() {
User user = new User();
// 删除数据的默认匹配格式是唯一ID。
user.setId((long)1);
DaoSession daoSession = this.getDaoSession();
daoSession.delete(user);
}
删除结果:
数据库中id为1的数据删除。
删除所有数据:
public void deleteAll() {
DaoSession daoSession = this.getDaoSession();
daoSession.deleteAll(User.class);
}
删除User表单的所有数据。
3、查询数据:
查询的方法有:
- loadAll():查询所有数据。
- queryRaw():根据条件查询。
- queryBuilder() : 方便查询的创建。
查询全部代码:
public List queryAll(){
List<User> users = daoSession.loadAll(User.class);
return users;
}
条件查询代码:
public List queryData(String s){
List<User> students = daoSession.queryRaw(User.class," where id = ?", s);
return students;
}
// 若有多个条件
public List queryData(String s){
List<User> students = daoSession.queryRaw(User.class," where id = ? AND where name = ?", s, "name");
return students;
}
查询结果:
通过queryBuilder()提高查询效率:
public List<User> queryByBuilder() {
DaoSession daoSession = this.getDaoSession();
// 创建对应的QueryBuilder
QueryBuilder<User> qb = daoSession.queryBuilder(User.class);
// 通过提供的已有方法和自动生成的列参数来进行查询
return qb.where(UserDao.Properties.Name.eq("张三2")).list();
}
4、更新数据:
更新代码:
public void update(User user) {
DaoSession daoSession = this.getDaoSession();
daoSession.update(user);
}
参考:
https://www.jianshu.com/p/53083f782ea2