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

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

参考

代码

你可能感兴趣的:(Android,各种框架使用)