上一篇文章写了greendao的基本使用,包括集成,创建表,封装了操作对象。
这篇介绍下基本的增加改查操作。
首先新建助手类来统统管理操作:
/**
* 完成对某一张表的具体操作,ORM 操作是对象
* Created by ge on 2017/4/6.
*/
public class DataBaseHelper {
private DaoManager daoManager;
public DataBaseHelper(Context context) {
daoManager = DaoManager.getInstance();
daoManager.init(context);
}
}
上篇文章我创建了一张表TestGroup包括了自增长的Id,int类型的组,和String类型的名称。
下面就针对这几个属性和这张表进行一些操作。
greendao还帮我们生成了除DaoMaster,DaoSession和TestGroupDao之外的实体类TestGroup:
package com.school.entity;
import org.greenrobot.greendao.annotation.*;
import java.io.Serializable;
// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. Enable "keep" sections if you want to edit.
/**
* Entity mapped to table "TEST_GROUP".
*/
@Entity
public class TestGroup implements Serializable {
@Id
private Long id;
private Integer group;
private String name;
@Generated
public TestGroup() {
}
public TestGroup(Long id) {
this.id = id;
}
@Generated
public TestGroup(Long id, Integer group, String name) {
this.id = id;
this.group = group;
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Integer getGroup() {
return group;
}
public void setGroup(Integer group) {
this.group = group;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
注:1.下文中旗是为了判断操作是否成功,下同;
以下的操作方法都是放在DataBaseHelper中的。
3.使用(activity中或fragment等活动界面中):
实例化数据库对象直接调用该方法传入相应参数即可
/**
* 对表进行插入一条数据操作
*/
public boolean insertStudent(TestGroup testGroup){
boolean flag = false;
flag = daoManager.getDaoSession().insert(testGroup)!= -1;
return flag;
}
2.插入多条数据:
/**
* 插入多条记录需要开辟新的线程
*/
public boolean insertListGroup(final List list){
boolean flag = false;
try{
daoManager.getDaoSession().runInTx(new Runnable() {
@Override
public void run() {
for(TestGroup school:list){
daoManager.getDaoSession().insertOrReplace(school);
}
}
});
flag = true;
} catch(Exception e){
e.printStackTrace();
}
return flag;
}
/**
* 完成对某一数据的修改
*/
public boolean updateTestGroup(TestGroup testGroup){
boolean flag = false;
try{
daoManager.getDaoSession().update(testGroup);
flag = true;
} catch(Exception e){
e.printStackTrace();
}
return flag;
}
/**
* 删除
*/
public boolean deleteTestGroup(TestGroup testGroup){
boolean flag = false;
try{
//删除一条
daoManager.getDaoSession().delete(testGroup);
//删除所有的
// daoManager.getDaoSession().deleteAll();
flag = true;
} catch(Exception e){
e.printStackTrace();
}
return flag;
}
5.查询所有
/**
* 查询所有
*/
public List queryListAll(){
return daoManager.getDaoSession().loadAll(TestGroup.class);
}
/**
* 查询单条记录
* 注:根据主键
*/
public TestGroup queryListOne(long key){
return daoManager.getDaoSession().load(TestGroup.class, key);
}
实际项目中会有各种需求,简单的查询可能不能满足我们的业务需求,这时候有两种选择:
1)使用queryRaw,中间参数直接可以写一些sq语句。如果对sq比较熟悉的可以使用。
2)使用QueryBuilder对象来建立查询条件。这种方式比较简单直观,不用对sq太深入了解。
第二种:
/**
* 查询条件ID
*/
public void queryById(){
//查询构建器
QueryBuilder builder = daoManager.getDaoSession().queryBuilder(TestGroup.class);
builder.where(TestGroupDao.Properties.Id.eq(1)).list();
}
greendao使用起来很简单,性能也是这些orm三方库中非常好的。
代码量减少,对sq不熟悉的童鞋们可以使用它来过渡。
最后还是建议多看看sq(哈哈)。
注:1)构建QueryBuilder对象。
2)where还有WhereOr,参数可以添加好多查询条件,其中where是并列,whereOr是或。
3)properties.id后可以设置各种查询条件,很简单很好理解
一些查询条件关键字:
“whereOr” where语句里面写的条件都是用“且”连接,whereOr里的语句使用“或”连接
“distinct” 直接过滤掉重负字段
“limit” 分页n个一页,一般和offset结合使用
“offset” 忽略查询出的前n条结果
“orderAsc” 以字段升序排序
“orderDesc”以字段降序
“preferLocalizedStringOrder” 本地化字符串排序
“orderCustom” 自定义排序 里面需要传两个参数: 一个属性 和对应的排序方案 ASC 或是 DESC
“orderRaw” 也是自定义排序, 把字段和 排序方案 写在一个字符串传入
“stringOrderCollation” 也是自定义排序 可以合并多个升降排序方案 以日期升序 且 价格降序
“notEq” 和eq相反,别傻傻在再去外面敲“!”取反
“notIn” 同上
“or” 或者
“like” 就是sql语句的LIKE "%"+string+"%"
“between” 也就是BETWEEN ? AND ? 可以取两个值的区间 (但是这条语句要慎用,不同的数据库不一样,有的是A<条件
“gt” 相当于 >
“ge”相当于 >=
“lt” 相当于 <
“le”相当于 <=
“isNull” 为空
“notIsNull” 不为空