Android数据库ObjectBox使用笔记[二]:查询操作

Android数据库ObjectBox使⽤笔记[⼆]:查询操作ObjectBox[三]:关系
ObjectBox[四]:事务
ObjectBox[五]:Kotlin⽀持
ObjectBox[六]:数据监听和RX
⼀、条件查询
1、单条件查询
// 查询 firstName 叫做 “joe”的⼈
List<User> joes = userBox.query()
.equal(User_.firstName, "Joe")
.build()
.find();
2、多条件查询
// 获得名“Joe”的⽤户,这些⽤户出⽣于1970年以后,姓以“O”开头。
QueryBuilder<User> builder = userBox.query();
builder.equal(User_.firstName, "Joe")
.greater(User_.yearOfBirth, 1970)
.startsWith(User_.lastName, "O");
List<User> youngJoes = builder
.build()
.find();
3、其他条件
equal()、notEqual()、 greater() 、less()
大学生活导论isNull() and notNull(),
between():过滤给定两个值之间的值
mStuBox.query().between(Student_.age,18,20)
in() and notIn():
String[] names =new String[]{"⼩明","⼩⽶"};
mStuBox.query().in(Student_.name, names,QueryBuilder.StringOrder.CASE_SENSITIVE);
startsWith(), endsWith() and contains()
排序结果
按升序排列,忽略⼤⼩写
userBox.query().equal(User_.firstName, "Joe")
.order(User_.lastName) // 按升序排列,忽略⼤⼩写
.
find();
以降序和区分⼤⼩写的⽅式
//  QueryBuilder.DESCENDING  :降序
// QueryBuilder.CASE_SENSITIVE :区分⼤⼩写
userBox.query().equal(User_.firstName, "Joe")
.order(User_.lastName, QueryBuilder.DESCENDING | QueryBuilder.CASE_SENSITIVE)
.find();
⼆、单表查询
1、find
返回与查询匹配的所有实体
List joes = query.find();
只返回第⼀个结果
User joe = query.findFirst();
如果您想要⼀个唯⼀的结果调⽤findUnique()。如果没有到匹配的实体,它将给您⼀个结果或null,如果有多个结果,则抛出异常。
User joe = query.findUnique();
2、复⽤query 和参数
初始化 query ,查询条件 暂⽆:备⽤ query
// build query
Query<User> query = userBox.query().equal(User_.firstName, "").build();
陶嘉舟具体实际查询:
// change firstName parameter to "Joe", get results
List<User> joes = query.setParameter(User_.firstName, "Joe").find();
...
// change firstName parameter to "Jake", get results
List<User> jakes = query.setParameter(User_.firstName, "Jake").find();
对firstName 属性设置多个查询条件时:
为equal()查询参数分配别名“name”
Query<User> query = userBox.query()
.equal(User_.firstName, "").parameterAlias("name");
然后,当设置⼀个新的参数值时,通过别名⽽不是属性:
List<User> joes = query.setParameter("name", "Joe").find();
3、限制、分页、偏移查询
// 从第5个开始(不含第五个),查询之后的10个
List<Student> stuList = mStuBox.query().equal(Student_.name, "张三")
.build()
.find(5, 10);
4、懒加载查询结果
query提供findLazy()和findLazyCached(),它们返回查询结果的LazyList。
是⼀个线程安全的、不可修改的列表,只有在实体被访问时才会懒洋洋地读取它们。根据所调⽤的find⽅法,延迟列表是否会被缓存。缓存的惰性列表存储以前访问过的对象,以避免多次加载实体。列表的⼀些特性仅限于缓存列表(例如,需要整个列表的特性)。
List<Student> stuList = mStuBox.query().equal(Student_.name, "⼩明")
.build()
.findLazy();
三、属性查询
如果您只想返回某个属性的值,⽽不是完整对象的列表,那么可以使⽤PropertyQuery。
// 返回第⼀个值
int age = mStuBox.query()
.build()
.property(Student_.age)
.findInt();
// 返回所有值
int[] ages = mStuBox.query()
.build()
.property(Student_.age)
.findInts();
注意:返回的属性值数组没有任何特定的顺序,即使您在构建查询时指定了顺序。
1、处理属性为 null 值
默认情况下,不返回空值。但是,如果属性为空,您可以指定要返回的替换值:
// returns 'unknown' if email is null
String[] emails = userBox.query().build()
.
property(User_.email)
.nullValue("unknown")
.findStrings();
2、查询唯⼀结果
// returns 'joe'
String[] names = userBox.query().build()
.property(User_.firstName)
.distinct()
.findStrings();
// returns 'Joe', 'joe', 'JOE'
String[] names = userBox.query().build()
.
property(User_.firstName)
.distinct(StringOrder.CASE_SENSITIVE)
.findStrings();
3、聚合数据
还提供聚合函数,直接计算所有到的值的最⼩值、最⼤值、平均值、和和计数:
min() / minDouble() : 获得最⼩值
max() / maxDouble() : 获得最⼤值
sum() / sumDouble() : 求和
avg() :平均数
count() :总数
年龄求和
long allAges = mStuBox.query()
.build()
飞燕外传txt下载.property(Student_.age)
.sum();
四、多表查询陈敏章
由于ObjectBox不是SQL数据库, 使⽤ link 能使不同表数据实体进⾏关联查询。
// 获得 学⽣姓名为:⼩明 ,课程名称为:语⽂的 所有课程
QueryBuilder<Student> stuBuilder = mStuBox.query()
.equal(Student_.name, "⼩明0");
List<Course> courses =stuBuilder
.link(Student_.courses)
.
equal(Course_.courseName, "语⽂")
.build().find();
// 获得学习课程名称为:语⽂,学⽣姓名为:⼩明0  所有学⽣
中国涂料论坛Box<Course> courseBox = ((App) getApplication()).getBoxStore()
.boxFor(Course.class);
QueryBuilder<Course> couBuilder = courseBox.query()
.equal(Course_.courseName, "语⽂");
List<Student> students = couBuilder.backlink(Student_.courses)
.equal(Student_.name, "⼩明0")
袁殊
.build()
.find();
五、过滤查询

本文发布于:2024-09-25 05:30:16,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/359587.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:查询   列表   返回   实体
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议