天天看点

Android GreenDao使用(二)增删改查

上一篇文章写了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等活动界面中):

实例化数据库对象直接调用该方法传入相应参数即可

1.插入一条数据:

/**
     * 对表进行插入一条数据操作
     */
    public boolean insertStudent(TestGroup testGroup){
        boolean flag = false;

        flag = daoManager.getDaoSession().insert(testGroup)!= -1;

        return flag;
    }
           

2.插入多条数据:

/**
     * 插入多条记录需要开辟新的线程
     */
    public boolean insertListGroup(final List <TestGroup> 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;
    }
           

3.对某一数据的修改

/**
     * 完成对某一数据的修改
     */
    public boolean updateTestGroup(TestGroup testGroup){
        boolean flag = false;

        try{
            daoManager.getDaoSession().update(testGroup);
            flag = true;
        } catch(Exception e){
            e.printStackTrace();
        }
        return flag;
    }
           

4.删除操作

/**
     * 删除
     */
    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;
    }
           

注:其中删除所有方法,传入参数testGroup的类类型即可。

5.查询所有

/**
     * 查询所有
     */
    public List <TestGroup> queryListAll(){
        return daoManager.getDaoSession().loadAll(TestGroup.class);
    }
           

6.根据唯一标识来查询某一条数据,我这里是根据主键

/**
     * 查询单条记录
     * 注:根据主键
     */
    public TestGroup queryListOne(long key){
        return daoManager.getDaoSession().load(TestGroup.class, key);
    }
           

实际项目中会有各种需求,简单的查询可能不能满足我们的业务需求,这时候有两种选择:

1)使用queryRaw,中间参数直接可以写一些sq语句。如果对sq比较熟悉的可以使用。

2)使用QueryBuilder对象来建立查询条件。这种方式比较简单直观,不用对sq太深入了解。

第二种:

/**
     * 查询条件ID
     */
    public void queryById(){
        //查询构建器
        QueryBuilder <TestGroup> 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<条件<B,有的是A<=条件<=B)

“gt” 相当于 >

“ge”相当于 >=

“lt” 相当于 <

“le”相当于  <=

“isNull” 为空

“notIsNull” 不为空