- 数据库框架之GreenDao
- 添加GreenDao
- 创建Bean与常用注解
- 初始化GreenDao
- 增删改查
- 插入数据
- 查询数据
- 更新数据
- 删除数据
- 测试结果
数据库框架之GreenDao
在我们开发项目中,经常需要涉及到数据库的使用,目前比较流行的开源项目也很多,今天要介绍主角的就是其中之一,GreenDao
。
Github项目地址:
添加GreenDao
首先我们需要将GreenDao添加到我们的项目中,本文使用的Ide是Android Studio。在当前的Project以及Module中的gradle中配置如下参数:
//配置在当前Project的gradle下:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'
}
}
//配置在当前的Module的gradle下:
apply plugin: 'org.greenrobot.greendao'
dependencies {
compile 'org.greenrobot:greendao:3.2.0'
}
//指定生成的Dao文件的位置
greendao {
targetGenDir 'src/main/java'
}
创建Bean与常用注解
文本介绍的GreenDao是基于3.2.0版,GreenDao
在更新到3.+版本之后也引入通过注解的方式来定义实体类,之后通过AS构建项目后,通过Gradle插件会自动帮我们生成相关的Dao文件,下面会介绍一些常用的注解的用法。
首先创建一个实体类:
@Entity
public class Person{
@Id(autoincrement = true)
private Long id;
@Property(nameInDb = "USERNAME")
@NotNull
private String name;
@Property(nameInDb = "USERAGE")
@NotNull
private int age;
@NotNull
private String sex;
}
- 实体类相关:
@Entry
:
指定在相应的数据库中生成对应的表
- 属性相关:
@Id
创建表中的主键,可以通过autoincrement = true
来设置主键自动增长。
@Property
对应该属性在表中的列的字段的名字,可以通过(nameInDb = "USERNAME")
来设定其中的名字,如果不设置,默认的话就是该属性的名字。
@NotNull
表示表中的该属性的值不能为null
创建完Entry类之后,我们通过gradle编译之后,就会在上面指定的位置生成相应的实体类文件以及Dao文件。
初始化GreenDao
对于数据库的操作,都是通过刚刚生成的Dao文件的实例来进行操作的,因此首先我们需要进行初始化,实例代码如下,之后我么就可以通过personDao实例对数据库进行操作了。
private PersonDao personDao;
private void initDao(){
LhyLogger.getInstance().setDebugEnable(true);
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(this, "lhy.db", null);
DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDb());
DaoSession daoSession = daoMaster.newSession();
personDao = daoSession.getPersonDao();
}
增删改查
针对数据库的操作不外乎增删改查,下面我们分别进行如下操作,涉及到对文件进行操作首先不要忘记在Manifest中声明相应的权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
插入数据
我们自定义2个方法,分别可以插入单条数据以及多条数据:
/**
* 插入多条数据
*
* @param personDao
* @param users
*/
private void insertUser2DB(PersonDao personDao, List<Person> users){
for(int i = 0; i < users.size(); i++){
personDao.insert(users.get(i));
}
}
/**
* 插入单条数据
*
* @param personDao
* @param user
*/
private void insertUser2DB(PersonDao personDao, Person user){
personDao.insert(user);
}
查询数据
查询数据是通过QueryBuilder
来构建的,查询条件可以通过where/or/and
方法添加,比如我们需要查询单个数据的话,查询Id主键为0的数据:
Person p = personDao.queryBuilder().where(PersonDao.Properties.Id.eq(0)).build().unique();
查询多条数据的话,可以通过list()方法
List<Person> p = personDao.queryBuilder().where(PersonDao.Properties.Name.eq("LHY")).build().list();
不添加搜索条件查询全部:
//查询所有数据
private List<Person> queryALL(){
List<Person> list = personDao.queryBuilder().list();
return list;
}
更新数据
更新某条数据的话,首先需要查询到这个数据,实例代码如下:将所有符合条件的人的年龄修改,调用的是update()
方法。
/**
* 修改数据内容
*
* @param personDao
* @param name
*/
private void updateUserInfo(PersonDao personDao, String name){
List<Person> persons = personDao.queryBuilder().where(PersonDao.Properties.Name.eq(name)).build().list;
if(null != persons){
for(Person person : persons){
person.setAge(1000);
personDao.update(person);
String resultSucc = ("修改数据成功, ID:" + person.getId());
// Toast.makeText(this, resultSucc, Toast.LENGTH_SHORT).show();
LhyLogger.getInstance().d(this, resultSucc);
}
}else{
String errorInfo = "该用户不存在";
Toast.makeText(this, errorInfo, Toast.LENGTH_SHORT).show();
LhyLogger.getInstance().d(this, errorInfo);
}
}
删除数据
删除数据与修改类似,首先都需要查询到数据,然后通过delete()
方法,实例代码如下:
/**
* 删除数据
*
* @param personDao
* @param personName
*/
private void deleteUser(PersonDao personDao, String personName){
List<Person> persons = personDao.queryBuilder().where(PersonDao.Properties.Name.eq(personName)).build().list();
if(null != persons){
for(Person person : persons){
personDao.delete(person);
String resultSucc = ("删除成功: ID: " + person.getId() + " personName: " + person.getName() + "; personAge: " + person.getAge());
LhyLogger.getInstance().d(this, resultSucc);
}
}else{
String errorInfo = "该用户不存在";
Toast.makeText(this, errorInfo, Toast.LENGTH_SHORT).show();
LhyLogger.getInstance().d(this, errorInfo);
}
}
测试结果
首先为了测试,我们先直接插入20条数据:
然后插入一条新的数据:
接着对其进行修改,我们发现修改成功:
接下来我们执行删除操作,为了演示,多添加了几条数据,可以看到成功删除: