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

举报
yechaoa 发表于 2022/05/30 22:55:38 2022/05/30
【摘要】 1.引入greenDAO 用过3.0之前的greenDAO的小伙伴们应该都知道在引入greenDAO的时候是非常麻烦,但是在3.0之后这个引入过程简化了很多,参考官网给出的指导,我们来看看如何引入greenDAO: 首先在project的gradle文件中引入greenDAO插件,引入之后如下: [java]&nbs...

1.引入greenDAO

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

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

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

然后在module的gradle文件中添加greenDAO的插件,并引入相关类库,修改之后如下:

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

小伙伴们注意首先是引入相关插件,然后在dependencies中引入greenDAO的类库。至于greenDAO中,schemaVersion表示数据库版本号,每次数据库升级的时候我们修改这里的版本号即可(修改这里的版本号,greenDAO会自动修改生成到DAOMaster中的版本号),targetGenDir表示greenDAO生成的DAOMaster和DaoSession的位置。OK,做完这一切我们就已经成功将greenDAO引入到我们的项目中了。

2.数据库初始化

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

[java]  view plain  copy
  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. }  

@Entity表示这个实体类一会会在数据库中生成对应的表,@Id表示该字段是id,小伙伴们注意该字段的数据类型为包装类型Long,为什么要用包装类型呢?我们一会插入数据的时候再说。@Property则表示该属性将作为表的一个字段,其中nameInDb看名字就知道这个属性在数据库中对应的数据名称。OK,写完这些之后将项目进行编译,编译成功之后系统会帮助我们生成相应的构造方法和get/set方法,并且还会在我们的包下生成DaoMaster和DaoSession。那么这里常用的注解除了这几个之外,还有一个较常用的就是 @Transient ,该注解表示这个属性将不会作为数据表中的一个字段。就是这么简单。另外还有一些比如@NotNull表示该字段不可以为空,@Unique表示该字段唯一。这里的注解还是挺多的,小伙伴们有兴趣可以自行研究。

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

[java]  view plain  copy
  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要怎么获取呢?如下:

[java]  view plain  copy
  1. userDao = daoSession.getUserDao();  

OK,这些东西都有了,接下来我们就可来操作数据库了。

3.添加数据

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

[java]  view plain  copy
  1. User user = new User(null"zhangsan" + random.nextInt(9999),"张三");  
  2.         userDao.insert(user);  

User的第一个参数为id,这里传null的话在插入的过程中id字段会自动增长(现在知道为什么id要为Long类型了吧!)第二个参数是username,每次插入时生成一个随机数,避免重复。

4.删除数据

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

[java]  view plain  copy
  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.         }  

where表示查询条件,这里我是查询id小于等于10的数据,where中的参数可以有多个,就是说可以添加多个查询条件。最后的list表示查询结果是一个List集合,如果你只想查询一条数据,最后unique即可。当然,我们也可以根据id来删除数据:

[java]  view plain  copy
  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.         }  

也可以将表中所有数据一次删除:

[java]  view plain  copy
  1. userDao.deleteAll();  

5.修改数据

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

[java]  view plain  copy
  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.         }  

这里我添加了两个查询条件,一个是id要大于等于10,同是还要满足username like %90%,注意最后的unique表示只查询一条数据出来即可。

6.查询数据

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

其实上面删除和修改都已经涉及到查询了,查询里边有许多非常好用的函数,我这里举两个例子between表示查询id介于2到13之间的数据,limit表示查询5条数据。

7.数据库升级

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

7.1 修改gradle文件

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

[java]  view plain  copy
  1. //这里改为最新的版本号  
  2. schemaVersion 2  
  3. targetGenDir 'src/main/java'  


7.2修改实体类

[java]  view plain  copy
  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,定义方式如下,注意继承类:

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

可以在onUpgrade方法中进行数据库的迁移,如果自定义了DBHelper,则数据库的初始化变为如下方式:

[java]  view plain  copy
  1. DBHelper devOpenHelper = new DBHelper(this);  
  2. DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDb());  
  3. DaoSession daoSession = daoMaster.newSession();  
  4. userDao = daoSession.getUserDao();  

OK,这就是greenDAO数据库框架的一个简单介绍,更多使用姿势参见官网。


github:https://github.com/greenrobot/greenDAO

官网:http://greenrobot.org/greendao/documentation/

原文:http://blog.csdn.net/u012702547/article/details/52226163

文章来源: blog.csdn.net,作者:yechaoa,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/yechaoa/article/details/79363096

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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