数据库框架之GreenDao


  • 数据库框架之GreenDao
    • 添加GreenDao
    • 创建Bean与常用注解
    • 初始化GreenDao
    • 增删改查
      • 插入数据
      • 查询数据
      • 更新数据
      • 删除数据
    • 测试结果

数据库框架之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中声明相应的权限:

插入数据
我们自定义2个方法,分别可以插入单条数据以及多条数据:
/** * 插入多条数据 * * @param personDao * @param users */ private void insertUser2DB(PersonDao personDao, List 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 p = personDao.queryBuilder().where(PersonDao.Properties.Name.eq("LHY")).build().list();

不添加搜索条件查询全部:
//查询所有数据 private List queryALL(){ List list = personDao.queryBuilder().list(); return list; }

更新数据
更新某条数据的话,首先需要查询到这个数据,实例代码如下:将所有符合条件的人的年龄修改,调用的是update()方法。
/** * 修改数据内容 * * @param personDao * @param name */ private void updateUserInfo(PersonDao personDao, String name){ List 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 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条数据:

然后插入一条新的数据:

接着对其进行修改,我们发现修改成功:

接下来我们执行删除操作,为了演示,多添加了几条数据,可以看到成功删除:

    推荐阅读