玩转Android之数据库框架greenDAO3.0使用指南

举报
江南一点雨 发表于 2021/08/16 22:24:55 2021/08/16
【摘要】 用过ActiveAndroid、玩过ORMLite,穿过千山万水,最终还是发现greenDAO好用,ActiveAndroid我之前有一篇文章介绍过 玩转Android之数据库框架ActiveAndroid的使用,如果小伙伴们有兴趣可以去查看,ActiveAndroid目前存在的问题是没有更新了,GitHub上ActiveAndroid的更新都是两年前的事了。所以我...

用过ActiveAndroid、玩过ORMLite,穿过千山万水,最终还是发现greenDAO好用,ActiveAndroid我之前有一篇文章介绍过 玩转Android之数据库框架ActiveAndroid的使用,如果小伙伴们有兴趣可以去查看,ActiveAndroid目前存在的问题是没有更新了,GitHub上ActiveAndroid的更新都是两年前的事了。所以我们还是来看看这个目前非常活跃的数据库框架greenDAO,greenDAO在升级到3.0之后使用方式也变得更加简单了,上手更加容易了。OK,我们今天就来看看吧。

1.引入greenDAO

用过3.0之前的greenDAO的小伙伴们应该都知道在引入greenDAO的时候是非常麻烦,但是在3.0之后这个引入过程简化了很多,参考官网给出的指导,我们来看看如何引入greenDAO:

首先在project的gradle文件中引入greenDAO插件,引入之后如下:


  
  1. dependencies {
  2. classpath 'com.android.tools.build:gradle:2.1.0'
  3. classpath 'org.greenrobot:greendao-gradle-plugin:3.1.0'
  4. // NOTE: Do not place your application dependencies here; they belong
  5. // in the individual module build.gradle files
  6. }


  
  1. apply plugin: 'com.android.application'
  2. apply plugin: 'org.greenrobot.greendao'
  3. android {
  4. ...
  5. ...
  6. greendao{
  7. schemaVersion 1
  8. targetGenDir 'src/main/java'
  9. }
  10. }
  11. dependencies {
  12. ...
  13. ...
  14. compile 'org.greenrobot:greendao:3.1.0'
  15. }


2.数据库初始化

数据库引入成功后,在使用之前,我们还得先来创建一个实体类:


  
  1. @Entity
  2. public class User {
  3. @Id
  4. private Long id;
  5. @Property(nameInDb = "USERNAME")
  6. private String username;
  7. @Property(nameInDb = "NICKNAME")
  8. private String nickname;
  9. }

@Transient

OK,这一步做完之后,我们就可以进行数据库的初始化了,如下:


  
  1. DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(getApplicationContext(), "lenve.db", null);
  2. DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDb());
  3. DaoSession daoSession = daoMaster.newSession();

首先获取一个DevOpenHelper对象,这个类有点类似于我们使用的SqliteOpenHelper,我们主要在这个类中对数据库的版本进行管理。这个我们到后面的数据库升级一节再说。这样之后,我们对数据库基本的初始化操作就完成了,玩过Hibernate的小伙伴都知道,在Hibernate框架中如果我们想要操作实体类要通过DAO来操作,那么在这里也一样。想要操作User实体类,得先有一个UserDao,这个UserDao要怎么获取呢?如下:

userDao = daoSession.getUserDao();
 


3.添加数据

数据库的增删改查我们都将通过UserDao来进行,插入操作如下:


  
  1. User user = new User(null, "zhangsan" + random.nextInt(9999),"张三");
  2. userDao.insert(user);


4.删除数据

删除数据和修改数据的思路一样,都是要先查找到数据:


  
  1. List<User> userList = (List<User>) userDao.queryBuilder().where(UserDao.Properties.Id.le(10)).build().list();
  2. for (User user : userList) {
  3. userDao.delete(user);
  4. }


  
  1. User user = userDao.queryBuilder().where(UserDao.Properties.Id.eq(16)).build().unique();
  2. if (user == null) {
  3. Toast.makeText(MainActivity.this, "用户不存在", Toast.LENGTH_SHORT).show();
  4. }else{
  5. userDao.deleteByKey(user.getId());
  6. }

userDao.deleteAll();
 

5.修改数据

修改数据也是先查询,再修改:


  
  1. User user = userDao.queryBuilder()
  2. .where(UserDao.Properties.Id.ge(10), UserDao.Properties.Username.like("%90%")).build().unique();
  3. if (user == null) {
  4. Toast.makeText(MainActivity.this, "用户不存在!", Toast.LENGTH_SHORT).show();
  5. }else{
  6. user.setUsername("王五");
  7. userDao.update(user);
  8. }


6.查询数据


  
  1. List<User> list = userDao.queryBuilder()
  2. .where(UserDao.Properties.Id.between(2, 13)).limit(5).build().list();
  3. for (int i = 0; i < list.size(); i++) {
  4. Log.d("google_lenve", "search: " + list.get(i).toString());
  5. }


7.数据库升级

数据库的升级其实就两个步骤我们来看看:

7.1 修改gradle文件

首先在module的gradle文件中修改版本号:


  
  1. //这里改为最新的版本号
  2. schemaVersion 2
  3. targetGenDir 'src/main/java'
  4. }


7.2修改实体类


  
  1. @Entity
  2. public class User {
  3. @Property
  4. private int age;
  5. @Property
  6. private String password;
  7. @Id
  8. private Long id;
  9. @Property(nameInDb = "USERNAME")
  10. private String username;
  11. @Property(nameInDb = "NICKNAME")
  12. private String nickname;
  13. }



一般的数据库升级这样就可以了,特殊情况可能需要自己编写数据库迁移脚本,这种时候可以自定义DBHelper,定义方式如下,注意继承类:


  
  1. public class DBHelper extends DaoMaster.OpenHelper {
  2. public static final String DBNAME = "lenve.db";
  3. public DBHelper(Context context) {
  4. super(context, DBNAME, null);
  5. }
  6. @Override
  7. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  8. super.onUpgrade(db, oldVersion, newVersion);
  9. }
  10. }


  
  1. DBHelper devOpenHelper = new DBHelper(this);
  2. DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDb());
  3. DaoSession daoSession = daoMaster.newSession();
  4. userDao = daoSession.getUserDao();




有问题欢迎留言讨论。


以上。



文章来源: wangsong.blog.csdn.net,作者:_江南一点雨,版权归原作者所有,如需转载,请联系作者。

原文链接:wangsong.blog.csdn.net/article/details/52226163

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。