3、GreenDao增删改查

(1)插入

  • 常用API
//这是最简单的插入语句,新增一行数据,返回值为行号
public long insert(T entity) //传递一个数组,新增多行数据
public void insertInTx(T... entities) //传递一个集合,新增多行数据
public void insertInTx(Iterable<T> entities) //传递一个集合,新增多行数据,setPrimaryKey:是否设置主键
public void insertInTx(Iterable<T> entities, boolean setPrimaryKey) //将给定的实体插入数据库,若此实体类存在,则覆盖
public long insertOrReplace(T entity) //使用事务操作,将给定的实体插入数据库,若此实体类存在,则覆盖
public void insertOrReplaceInTx(T... entities) //使用事务操作,将给定的实体插入数据库,若此实体类存在,则覆盖
public void insertOrReplaceInTx(Iterable<T> entities) //使用事务操作,将给定的实体插入数据库,若此实体类存在,则覆盖,并设置是否设定主键
public void insertOrReplaceInTx(Iterable<T> entities, boolean setPrimaryKey)
  • 插入
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "demo.db", null);
SQLiteDatabase db = helper.getWritableDatabase();
DaoMaster daoMaster = new DaoMaster(db);
DaoSession daoSession = daoMaster.newSession();
StudentDao studentDao = daoSession.getStudentDao(); for (int i = 0; i < 10; i++) {
Student student = new Student();
student.setMId(i+"");
student.setHobby("篮球");
student.setMAge(i);
student.setClassName("一年级");
long id = studentDao.insertOrReplace(student);
Log.e(TAG, "onCreate: "+id );
}

(2)查询

  • Dao查询常用方法
//根据主键来查询一条数据
public T load(K key) //根据行号来查询一条数据,行号从1开始
public T loadByRowId(long rowId) //查询表中所有的数据
public List<T> loadAll()
  • Dao查询
        Student load = studentDao.load("1");
Log.e(TAG, "onCreate: "+load.toString() );
  • QueryBuilder查询常用方法
// 条件,AND 连接
public QueryBuilder<T> where(WhereCondition cond, WhereCondition... condMore) // 条件,OR 连接
public QueryBuilder<T> whereOr(WhereCondition cond1, WhereCondition cond2, WhereCondition... condMore) //去重
public QueryBuilder<T> distinct() //分页
public QueryBuilder<T> limit(int limit) //偏移结果起始位,配合limit(int)使用
public QueryBuilder<T> offset(int offset) //排序,升序
public QueryBuilder<T> orderAsc(Property... properties) //排序,降序
public QueryBuilder<T> orderDesc(Property... properties) // 排序,自定义
public QueryBuilder<T> orderCustom(Property property, String customOrderForProperty) // 排序,SQL 语句
public QueryBuilder<T> orderRaw(String rawOrder) //本地化字符串排序,用于加密数据库无效
public QueryBuilder<T> preferLocalizedStringOrder() //自定义字符串排序,默认不区分大小写
public QueryBuilder<T> stringOrderCollation(String stringOrderCollation)
  • 返回结果的方法
//值返回一条结果,如果返回结果的数量>1,则报错。如果返回结果的数量等于0,那么返回null。
public T unique() //值返回一条结果,如果返回结果的数量>1或=0,则报错。
public T uniqueOrThrow() //返回一个集合
public List<T> list() //让我们通过按需加载数据(懒惰)来迭代结果。数据未缓存。必须关闭
public CloseableListIterator<T> listIterator() //实体按需加载到内存中。首次访问列表中的元素后,将加载并缓存该元素以供将来使用。必须关闭。
public LazyList<T> listLazy() //实体的“虚拟”列表:对列表元素的任何访问都会导致从数据库加载其数据。必须关闭。
public LazyList<T> listLazyUncached()
  • 判断条件
//等于
eq() //不等于
notEq() //值等于
like() //取中间范围
between() //in命令
in() //not in 命令
notIn() //大于
gt() //小于
lt() //大于等于
ge() //小于等于
le() //为空
isNull() //不为空
isNotNull()
  • 查询所有
        // 查询所有
List<Student> list = studentDao.queryBuilder().list();
Log.e(TAG, "onCreate: "+list.size());
  • And查询
        // And条件查询
List<Student> list = studentDao.queryBuilder()
.where(StudentDao.Properties.MId.eq(2))
.where(StudentDao.Properties.ClassName.eq("一年级"))
.list();
Log.e(TAG, "onCreate: "+list.size());
  • Or查询
        // Or条件查询
List<Student> list = studentDao.queryBuilder()
.whereOr(StudentDao.Properties.ClassName.eq("一年级"),
StudentDao.Properties.MId.eq(2))
.list();
Log.e(TAG, "onCreate: "+list.size());
  • 偏移查询
        // 查询10条数据、偏移5条数据
List<Student> list = studentDao.queryBuilder()
.offset(5)
.limit(10)
.list();
Log.e(TAG, "onCreate: "+list.size());
  • 模糊查询
        // 模糊查询(%级% 代表“级”前面和后面可能存在字符,也可以不存在)
// 一% 表示以一开头的字符串
List<Student> list = studentDao.queryBuilder()
.where(StudentDao.Properties.ClassName.like("%级%"))
.list();
Log.e(TAG, "onCreate: "+list.size());
  • 排序
        // 返回按照年龄倒序排序
List<Student> list = studentDao.queryBuilder()
.orderDesc(StudentDao.Properties.MAge)
.list();
Log.e(TAG, "onCreate: "+list.size());
  • in
        // in操作符
List<Student> list = studentDao.queryBuilder()
.where(StudentDao.Properties.MId.in(1,2,3))
.list();
Log.e(TAG, "onCreate: "+list.size());
  • sql语句查询
        // sql语句查询
List<Student> list = studentDao.queryBuilder()
.where(new WhereCondition.StringCondition(StudentDao.Properties.ClassName.columnName+"=?","一年级"))
.list();
Log.e(TAG, "onCreate: "+list.size());

(3)更新

  • 常用API
public void update(T entity)
public void updateInTx(T... entities)
public void updateInTx(Iterable<T> entities)
  • 更新会导致其他字段置为空
        Student student = new Student();
student.setMId("1");
student.setClassName("高一");
studentDao.update(student);

  • 查询后再更新,就不会导致其他字段清空
        // 先查询后更新
Student load = studentDao.load("0");
load.setHobby("足球");
studentDao.update(load);

(4)保存

  • save
public void save(T entity)
public void saveInTx(T... entities)
public void saveInTx(Iterable<T> entities)
  • 传入一个实体entity,如果entity的主键在表中已存在,则更新已有数据,反之,则插入新数据
public void save(T entity) {
if (hasKey(entity)) {
update(entity);
} else {
insert(entity);
}
}

(5)删除

  • 常用方法
//根据实体,删除一条数据(默认根据主键删除数据)
public void delete(T entity) //删除所有数据
public void deleteAll() //根据key删除数据
public void deleteByKey(K key) //删除多条数据
public void deleteInTx(T... entities) //根据主键数组,删除多条数据
public void deleteByKeyInTx(K... keys) //根据集合,删除多条数据
public void deleteByKeyInTx(Iterable<K> keys)

GreenDao增删改查的更多相关文章

  1. 快速入门GreenDao框架并实现增删改查案例

    大家的项目中不可避免的使用到SQLite,为此我们要花费心思编写一个增删改查框架.而一个好的ORM框架则能够给我们带来极大的方便,今天给大家讲解一个非常火热的ORM-GreenDao. 基本概念 Gr ...

  2. GreenDao数据库框架的配置与增删改查

    并非原创,原创地址http://blog.csdn.net/njweiyukun/article/details/51893092 配置-------------------------------- ...

  3. greendao对SQLite数据库的增删改查操作

    利用greendao操作数据库时,都是以对象或者对象的list来进行增删改查的操作,操作的结果都是用一个list来接收的!!! 1.增加一条记录 Stu stu01=new Stu();stu01.s ...

  4. Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示

    Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下: 完整Demo:http://pan.baidu.com/s/1i3TcEzj 注 意 事 项:http:// ...

  5. ASP.NET从零开始学习EF的增删改查

           ASP.NET从零开始学习EF的增删改查           最近辞职了,但是离真正的离职还有一段时间,趁着这段空档期,总想着写些东西,想来想去,也不是很明确到底想写个啥,但是闲着也是够 ...

  6. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(9)-MVC与EasyUI结合增删改查

    系列目录 文章于2016-12-17日重写 在第八讲中,我们已经做到了怎么样分页.这一讲主要讲增删改查.第六讲的代码已经给出,里面包含了增删改,大家可以下载下来看下. 这讲主要是,制作漂亮的工具栏,虽 ...

  7. 通过Java代码实现对数据库的数据进行操作:增删改查

    在写代码之前,依然是引用mysql数据库的jar包文件:右键项目-构建路径-设置构建路径-库-添加外部JAR 在数据库中我们已经建立好一个表xs :分别有xuehao  xingming    xue ...

  8. Hibernate全套增删改查+分页

    1.创建一个web工程 2.导入jar包 3.创建Student表 4.创建实体类 package com.entity; public class Student { private Integer ...

  9. 使用 Json.Net 对Json文本进行 增删改查

    JSON 已经成为当前主流交互格式, 如何在C#中使用 Json.Net 对Json文本进行 增删改查呢?见如下代码 #region Create (从零创建) public static strin ...

随机推荐

  1. git merge 与 git rebase的区别?

    一,git merge 与 git rebase的区别 1,git merge 例如: master分支合并dev分支,git将两个分支dev和master上的所有commit , 按照提交时间的先后 ...

  2. LUMEN框架多数据库连接配置方法

    LUMEN作为一款API导向很浓的框架,配置极简化,默认只支持一路DB配置 然而随着业务复杂度的提高,引入多个数据库连接似乎无法避免,下面介绍一下LUMEN连接多个数据库的配置方法: 修改.env文件 ...

  3. SQL中 char varchar和nvarchar的区别

    转至:http://www.cnblogs.com/carekee/articles/2094676.html char    char是定长的,也就是当你输入的字符小于你指定的数目时,char(8) ...

  4. Vue.js 获得兄弟元素,子元素,父元素(DOM操作)

    e.target 是你当前点击的元素 e.currentTarget 是你绑定事件的元素 e.currentTarget.previousElementSibling.innerHTML 获得点击元素 ...

  5. CopyTranslator安装与使用

    PDF 格式的文本,本质上是保证了在大部分设备上都能保持清晰完整的排版格式,但不利于进一步使用,但是 PDF 文档文字复制会包括回车键,文字粘粘和翻译都不方便.通常的做法就是,先转换成 Word 格式 ...

  6. 嵌入式linux和stm32嵌入式开发这两者之间有什么关联性

    对于更开始入坑的同学,可能也像我一样搞不清楚两者的区别与联系.现在结合知乎网上的相关资料发一篇文章来具体分析. 基于STM32的开发属于微控制器开发领域,主要开发工具是keil或IAR,这种开发更准确 ...

  7. 4G DTU的使用方法和应用领域

    4G DTU是一种数据传输单元,通俗理解就是,用来传输数据的一种硬件.既然是用来传输数据的,那就能将它视为一个管道,也就是说,指令同过它传给设备,而管道是不对这些指令做出响应的. 4G DTU如何使用 ...

  8. MYSQL中inner join、left join 和 right join的区别

    首先join连接是用来进行多表关联查询的,join连接方式有三种连接方式:inner join.left join 和 right join 1.inner join 可以简写成join,叫内连接,查 ...

  9. pycharm pro2020版专业版永久激活

    pycharm2020版本专业版永久激活[亲测有效] pycharm2020.1版安装包与破解工具下载 可私信我获取资源. 公众号,轻松学编程 教程 1.先下载安装包和破解补丁压缩包,然后点击pych ...

  10. linux查看日志的几种方法

    linux 日志查看 tail.head. cat.tac.sed.less.echo 1.命令格式: tail       [必要参数]     [选择参数]     [文件] -f 循环读取 -q ...