玩转Android之数据库框架greenDAO3.0使用指南
用过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插件,引入之后如下:
-
dependencies {
-
classpath 'com.android.tools.build:gradle:2.1.0'
-
classpath 'org.greenrobot:greendao-gradle-plugin:3.1.0'
-
-
// NOTE: Do not place your application dependencies here; they belong
-
// in the individual module build.gradle files
-
}
-
apply plugin: 'com.android.application'
-
apply plugin: 'org.greenrobot.greendao'
-
-
android {
-
...
-
...
-
-
greendao{
-
schemaVersion 1
-
targetGenDir 'src/main/java'
-
}
-
}
-
-
dependencies {
-
...
-
...
-
-
compile 'org.greenrobot:greendao:3.1.0'
-
}
2.数据库初始化
数据库引入成功后,在使用之前,我们还得先来创建一个实体类:
-
@Entity
-
public class User {
-
@Id
-
private Long id;
-
@Property(nameInDb = "USERNAME")
-
private String username;
-
@Property(nameInDb = "NICKNAME")
-
private String nickname;
-
}
@Transient
OK,这一步做完之后,我们就可以进行数据库的初始化了,如下:
-
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(getApplicationContext(), "lenve.db", null);
-
DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDb());
-
DaoSession daoSession = daoMaster.newSession();
首先获取一个DevOpenHelper对象,这个类有点类似于我们使用的SqliteOpenHelper,我们主要在这个类中对数据库的版本进行管理。这个我们到后面的数据库升级一节再说。这样之后,我们对数据库基本的初始化操作就完成了,玩过Hibernate的小伙伴都知道,在Hibernate框架中如果我们想要操作实体类要通过DAO来操作,那么在这里也一样。想要操作User实体类,得先有一个UserDao,这个UserDao要怎么获取呢?如下:
userDao = daoSession.getUserDao();
3.添加数据
数据库的增删改查我们都将通过UserDao来进行,插入操作如下:
-
User user = new User(null, "zhangsan" + random.nextInt(9999),"张三");
-
userDao.insert(user);
4.删除数据
删除数据和修改数据的思路一样,都是要先查找到数据:
-
List<User> userList = (List<User>) userDao.queryBuilder().where(UserDao.Properties.Id.le(10)).build().list();
-
for (User user : userList) {
-
userDao.delete(user);
-
}
-
User user = userDao.queryBuilder().where(UserDao.Properties.Id.eq(16)).build().unique();
-
if (user == null) {
-
Toast.makeText(MainActivity.this, "用户不存在", Toast.LENGTH_SHORT).show();
-
}else{
-
userDao.deleteByKey(user.getId());
-
}
userDao.deleteAll();
5.修改数据
修改数据也是先查询,再修改:
-
User user = userDao.queryBuilder()
-
.where(UserDao.Properties.Id.ge(10), UserDao.Properties.Username.like("%90%")).build().unique();
-
if (user == null) {
-
Toast.makeText(MainActivity.this, "用户不存在!", Toast.LENGTH_SHORT).show();
-
}else{
-
user.setUsername("王五");
-
userDao.update(user);
-
}
6.查询数据
-
List<User> list = userDao.queryBuilder()
-
.where(UserDao.Properties.Id.between(2, 13)).limit(5).build().list();
-
for (int i = 0; i < list.size(); i++) {
-
Log.d("google_lenve", "search: " + list.get(i).toString());
-
}
7.数据库升级
数据库的升级其实就两个步骤我们来看看:
7.1 修改gradle文件
首先在module的gradle文件中修改版本号:
-
//这里改为最新的版本号
-
schemaVersion 2
-
targetGenDir 'src/main/java'
-
}
7.2修改实体类
-
@Entity
-
public class User {
-
@Property
-
private int age;
-
@Property
-
private String password;
-
@Id
-
private Long id;
-
@Property(nameInDb = "USERNAME")
-
private String username;
-
@Property(nameInDb = "NICKNAME")
-
private String nickname;
-
}
一般的数据库升级这样就可以了,特殊情况可能需要自己编写数据库迁移脚本,这种时候可以自定义DBHelper,定义方式如下,注意继承类:
-
public class DBHelper extends DaoMaster.OpenHelper {
-
public static final String DBNAME = "lenve.db";
-
-
public DBHelper(Context context) {
-
super(context, DBNAME, null);
-
}
-
-
@Override
-
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
-
super.onUpgrade(db, oldVersion, newVersion);
-
}
-
}
-
DBHelper devOpenHelper = new DBHelper(this);
-
DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDb());
-
DaoSession daoSession = daoMaster.newSession();
-
userDao = daoSession.getUserDao();
有问题欢迎留言讨论。
以上。
文章来源: wangsong.blog.csdn.net,作者:_江南一点雨,版权归原作者所有,如需转载,请联系作者。
原文链接:wangsong.blog.csdn.net/article/details/52226163
- 点赞
- 收藏
- 关注作者
评论(0)