MongoDB——示例查询(ExampleMatcher、Example)

更新时间:2023-06-28 09:27:11 阅读: 评论:0

MongoDB——⽰例查询(ExampleMatcher、Example)⽰例查询(QBE)是⼀种简单的⽤户友好查询技术,它可以动态构建查询体,并且不需要开发者便携包含字段名称的查询
按⽰例查询分为三个组件:
-- Probe:可以理解为为查询构建的实例对象
-- ExampleMatcher:
-- Example:由Probe和ExampleMathcer组成,⽤于创建查询
使⽤⽰例查询的⼀些限制:
-- 不⽀持嵌套或者分组
-- 不⽀持字符串的开始、包含、结束和正则表达式匹配
实例1 简单的查询⽰例
1.创建⼀个Probe(对象)
@Data
public class Person{
@Id
private String id;
private String firstname;
private String lastname;
private Address address;
}
使⽤@Data添加get、t⽅法,这个对象将本⽤来构建⼀个Example,默认情况下,属性值为null时将会被忽略,并且字符串类型的数据将会被特定的默认值匹配
of():⼯⼚⽅法,⽤来构建⽰例
前童古镇
Example是固定不变的,下⾯是⼀个简答的使⽤⽰例
梦见给别人钱2.简单⽰例
Person person = new Person();    //构建⼀个新的实例
person.tFirstname("Dave");    //设置查询属性
Example<Person> example = Example.of(person);    //创建⽰例
3. 执⾏查询
这⾥我们要⽤到⼀个mongoDB存储库的扩展接⼝,具体源码如下:
package org.pository.query;
import java.util.Optional;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
public interface QueryByExampleExecutor<T> {
<S extends T> Optional<S> findOne(Example<S> var1);
<S extends T> Iterable<S> findAll(Example<S> var1);
<S extends T> Iterable<S> findAll(Example<S> var1, Sort var2);
<S extends T> Page<S> findAll(Example<S> var1, Pageable var2);
<S extends T> long count(Example<S> var1);
糯米糕的做法<S extends T> boolean exists(Example<S> var1);
关联方关系}
我们可以使⽤上⾯接⼝中定义的⽅法实现查询:
messageRepository.findOne(Example.of(ur));
⽰例匹配器
⽰例匹配器可以⽤来对字符串的默认匹配⽅式进⾏⾃定义操作,如下所⽰:
Person person = new Person();      //创建⽰例
person.tFirstname("Dave");      //设置查询属性
ExampleMatcher matcher = ExampleMatcher.matching()      //创建⼀个匹配器
.withIgnorePaths("lastname")      //忽略名为"lastname"的属性路径
.withIncludeNullValues()      //在上⾯的条件基础上属性可以为null(包含空值)
美国糼交
.withStringMatcherEnding();      //执⾏后缀字符串匹配
Example<Person> example = Example.of(person, matcher);      // 创建⼀个包含匹配器的⽰例默认情况下:ExampleMatcher期望实例上设置的所有字段都匹配
配置匹配器选项
可以为单个属性设置⼀些特有的处理⽅式
ExampleMatcher matcher = ExampleMatcher.matching()
.withMatcher("firstname", endsWith())
.withMatcher("lastname", startsWith().ignoreCa());
清激}
足球皇
使⽤lamdas配置匹配器选项 (java8以上版本可⽤)
ExampleMatcher matcher = ExampleMatcher.matching()
.withMatcher("firstname", match -> dsWith())
.withMatcher("firstname", match -> match.startsWith());
}
Untyped Example
石斛鸡汤默认情况下,Example是严格输⼊,这意味着映射出来的查询中的属性是包含类型的情况下匹配的,也就是说,在进⾏匹配器匹配的时候,是带着属性的值;类型进⾏匹配的
untypedExampleMatcher是可以绕过默认匹配⾏为并且跳过类型限制,值匹配字段名称,如下
class JustAnArbitraryClassWithMatchingFieldName {
@Field("lastname") String value;
}
JustAnArbitraryClassWithMatchingFieldNames probe = new JustAnArbitraryClassWithMatchingFieldNames();
probe.value = "stark";
Example example = Example.of(probe, UntypedExampleMatcher.matching());
Query query = new Query(new Criteria().alike(example));
List<Person> result = template.find(query, Person.class);

本文发布于:2023-06-28 09:27:11,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1058521.html

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

标签:查询   匹配   属性
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图