您的位置:首页 > 移动开发 > Android开发

Android中数据库操作框架greenDAO介绍与使用

2018-02-06 13:53 831 查看
greenDAO是一个轻量化且快速的ORM框架,专门为Android高度优化和定制的,它能够支持每秒数千记录的CRUD操作。我们从官网上面一张Benchmark图可以看出它与ormlite和ActiveAndroid的性能对比,



添加依赖:

// In your root build.gradle file:
buildscript {
repositories {
jcenter()
mavenCentral() // add repository
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
}
}

// In your app projects build.gradle file:
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin

dependencies {
compile 'org.greenrobot:greendao:3.2.2' // add library
}


实体类生成

@Entity
public class User {
@Id(autoincrement = true)
private Long userId;
@Property(nameInDb = "userName")
private String userName;
@Property(nameInDb = "age")
private int age;
@Property(nameInDb = "addr")
private String addr;
@Generated(hash = 2044495610)
public User(Long userId, String userName, int age, String addr) {
this.userId = userId;
this.userName = userName;
this.age = age;
this.addr = addr;
}
@Generated(hash = 586692638)
public User() {
}
public Long getUserId() {
return this.userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public String getUserName() {
return this.userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddr() {
return this.addr;
}
public void setAddr(String addr) {
this.addr = addr;
}

@Override
public String toString() {
return "User{" +
"userId=" + userId +
", userName='" + userName + '\'' +
", age=" + age +
", addr='" + addr + '\'' +
'}';
}
}


@Entity  表明这个实体类会在数据库中生成一个与之相对应的表。

@Id  对应数据表中的 Id 字段,有了解数据库的话,是一条数据的唯一标识。且数据类型必须为Long类型

@Property(nameInDb = “STUDENTNUM”)  表名这个属性对应数据表中的 STUDENTNUM 字段。

@Property  可以自定义字段名,注意外键不能使用该属性

@NotNull  该属性值不能为空

@Transient  该属性不会被存入数据库中

@Unique  表名该属性在数据库中只能有唯一值

当你写完实体类中的属性之后,点击编译,就会自动生成相应的 setter 和 getter 方法,至于那些 hash 值是自动赋值上去的。并且在该目录下生成 DaoMaster 和 DaoSession 这两个类用于初始化数据库。

增删改查

一般数据库的操作都离不开增删改查,那么我们就从这开始。

初始化

DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(context, "user", null);
DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDb());
daoSession = daoMaster.newSession();


如果实体类有更新,那么要调用 daoSession.clear() 清除缓存,才能得到更新。



public void add(User user){
UserDao userDao = daoSession.getUserDao();
userDao.insert(user);
}




public void delete(User user){
UserDao userDao = daoSession.getUserDao();
userDao.delete(user);//通过实体删除
//userDao.deleteByKey(user.getUserId());//通过主键删除
}


改:

public void update(User user){
UserDao userDao = daoSession.getUserDao();
userDao.update(user);
}


查:

public List<User> query(User user){
UserDao userDao = daoSession.getUserDao();
List<User> users=userDao.queryBuilder()
.offset(1)
.limit(3)
.orderAsc(UserDao.Properties.UserName)
.where(UserDao.Properties.UserName.eq(user.getUserName()))
.build()
.list();
return users;
}
public List<User> queryAll(){
UserDao userDao = daoSession.getUserDao();
List<User> users = userDao.queryBuilder().list();
return users;
}


参考

代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: