前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Data Commons 示例查询

Spring Data Commons 示例查询

原创
作者头像
IT胶囊
修改2021-09-28 18:16:13
7870
修改2021-09-28 18:16:13
举报
文章被收录于专栏:IT技能应用

原标题:Spring认证|Spring Data Commons 示例查询

6.1. 介绍

本章介绍了 Query by Example 并解释了如何使用它。

示例查询 (QBE) 是一种用户友好的查询技术,具有简单的界面。它允许动态创建查询,并且不需要您编写包含字段名称的查询。事实上,Query by Example 根本不需要您使用特定于商店的查询语言编写查询。

6.2. 用法

Query by Example API 由三部分组成:

探针:具有填充字段的域对象的实际示例。

ExampleMatcher:ExampleMatcher包含有关如何匹配特定字段的详细信息。它可以在多个示例中重复使用。

Example: AnExample由探针和ExampleMatcher. 它用于创建查询。

Query by Example 非常适合以下几个用例:

使用一组静态或动态约束查询您的数据存储。

频繁重构域对象而不必担心破坏现有查询。

独立于底层数据存储 API 工作。

Query by Example 也有几个限制:

不支持嵌套或分组的属性约束,例如firstname = ?0 or (firstname = ?1 and lastname = ?2).

仅支持字符串的开始/包含/结束/正则表达式匹配以及其他属性类型的精确匹配。

在开始使用 Query by Example 之前,您需要有一个域对象。首先,为您的存储库创建一个接口,如以下示例所示:

示例 69.示例 Person 对象

public class Person {

@Id

private String id;

private String firstname;

private String lastname;

private Address address;

// … getters and setters omitted

}

前面的示例显示了一个简单的域对象。您可以使用它来创建Example. 默认情况下,null忽略具有值的字段,并使用商店特定的默认值匹配字符串。

将属性包含在 Query by Example 标准中是基于可空性。除非忽略属性路径,否则始终包含使用原始类型 ( int, double, ...)的属性。

可以使用of工厂方法或使用ExampleMatcher. Example是不可变的。以下清单显示了一个简单的示例:

示例 70. 简单示例

Person person = new Person();? ? ? ? ? ? ? ? ? ? ? ?

person.setFirstname("Dave");? ? ? ? ? ? ? ? ? ? ? ?

Example example = Example.of(person);? ? ? ?

创建域对象的新实例。

设置要查询的属性。

创建Example.

您可以使用存储库运行示例查询。为此,让您的存储库接口扩展QueryByExampleExecutor. 以下清单显示了QueryByExampleExecutor界面的摘录:

例 71. QueryByExampleExecutor

public interface QueryByExampleExecutor {

S findOne(Example example);

Iterable findAll(Example example);

// … more functionality omitted.

}

6.3. 示例匹配器

示例不限于默认设置。您可以使用 为字符串匹配、空值处理和特定于属性的设置指定自己的默认值ExampleMatcher,如以下示例所示:

示例 72. 具有自定义匹配的示例匹配器

Person person = new Person();? ? ? ? ? ? ? ? ? ? ? ?

person.setFirstname("Dave");? ? ? ? ? ? ? ? ? ? ? ? ?

ExampleMatcher matcher = ExampleMatcher.matching()? ?

.withIgnorePaths("lastname")? ? ? ? ? ? ? ? ? ? ? ?

.withIncludeNullValues()? ? ? ? ? ? ? ? ? ? ? ? ? ?

.withStringMatcher(StringMatcher.ENDING);? ? ? ? ?

Example example = Example.of(person, matcher);

创建域对象的新实例。

设置属性。

创建一个ExampleMatcher以期望所有值匹配。即使没有进一步的配置,它也可以在这个阶段使用。

构造一个新ExampleMatcher的忽略lastname属性路径。

构造一个 newExampleMatcher以忽略lastname属性路径并包含空值。

构造一个 newExampleMatcher来忽略lastname属性路径,包含空值,并执行后缀字符串匹配。

创建一个新的Example基于域对象和配置上ExampleMatcher。

默认情况下,ExampleMatcher期望在探测器上设置的所有值都匹配。如果要获得与任何隐式定义的谓词匹配的结果,请使用ExampleMatcher.matchingAny().

您可以为单个属性指定行为(例如“名字”和“姓氏”,或者对于嵌套属性,“address.city”)。您可以使用匹配选项和区分大小写来调整它,如以下示例所示:

示例 73. 配置匹配器选项

ExampleMatcher matcher = ExampleMatcher.matching()

.withMatcher("firstname", endsWith())

.withMatcher("lastname", startsWith().ignoreCase());

}

另一种配置匹配器选项的方法是使用 lambdas(在 Java 8 中引入)。这种方法创建了一个回调,要求实现者修改匹配器。您不需要返回匹配器,因为配置选项保存在匹配器实例中。以下示例显示了使用 lambda 的匹配器:

示例 74. 使用 lambda 配置匹配器选项

ExampleMatcher matcher = ExampleMatcher.matching()

.withMatcher("firstname", match -> match.endsWith())

.withMatcher("firstname", match -> match.startsWith());

}

Example使用配置的合并视图创建的查询。默认匹配设置可以在ExampleMatcher级别设置,而单独的设置可以应用于特定的属性路径。已设置上的设置ExampleMatcher由属性路径设置继承,除非它们被明确定义。属性补丁上的设置比默认设置具有更高的优先级。下表描述了各种ExampleMatcher设置的范围:

内容来源:(Spring中国教育管理中心)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com