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    }

实体类生成

@Entitypublic 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;    }

参考

代码

更多相关文章

  1. listview 属性 小结
  2. Android属性动画完全解析(上),初识属性动画的基本用法
  3. Android 使用反射机制获取或设置系统属性(SystemProperties)
  4. androidのsms,mms短彩信数据库
  5. ImageView的android:scaleType各属性含义(zz)
  6. android APK 带数据库
  7. Android布局中的android:onClick=“...”属性
  8. android gridview几个重要属性

随机推荐

  1. 用Python手写五大经典排序算法,看完这篇终
  2. 动态气泡图,拿走不谢!
  3. 谷歌家的验证码怎么了?搞他!
  4. 墙裂推荐!小白入门数据科学的几个宝藏学习
  5. 东哥的第一个露脸视频来了,还有小惊喜!
  6. 牛逼!一行代码让 pandas 的 apply 速度飙
  7. 太强了!这个 Jupyter notebook 离线工具可
  8. 安利一个Python大数据分析神器!
  9. 5 个pandas神级操作,最后一个长见识了!
  10. 刷爆全网的动态条形图,原来5行Python代码