Spring Data JPA实践与学习
程序员文章站
2024-01-01 22:02:40
QueryByExampleExecutorQueryByExampleExecutor(QBE)是一种用户友好的查询技术,具有简单的接口,它允许动态查询创建,并且不需要编写包含字段名称的查询。类图:QueryByExampleExecutor 是 JpaRepository 的父接口,也就是 JpaRespository 里面继承了 QueryByExampleExecutor 的所有方法。QBE 的基本语法public interface QueryByExampleExecutor<...
QueryByExampleExecutor
QueryByExampleExecutor(QBE)是一种用户友好的查询技术,具有简单的接口,它允许动态查询创建,并且不需要编写包含字段名称的查询。
类图:
QueryByExampleExecutor 是 JpaRepository 的父接口,也就是 JpaRespository 里面继承了 QueryByExampleExecutor 的所有方法。
QBE 的基本语法
public interface QueryByExampleExecutor<T> {
//根据“实体”查询条件,查找一个对象
<S extends T> S findOne(Example<S> example);
//根据“实体”查询条件,查找一批对象
<S extends T> Iterable<S> findAll(Example<S> example);
//根据“实体”查询条件,查找一批对象,可以指定排序参数
<S extends T> Iterable<S> findAll(Example<S> example, Sort sort);
//根据“实体”查询条件,查找一批对象,可以指定排序和分页参数
<S extends T> Page<S> findAll(Example<S> example, Pageable pageable);
//根据“实体”查询条件,查找返回符合条件的对象个数
<S extends T> long count(Example<S> example);
//根据“实体”查询条件,判断是否有符合条件的对象
<S extends T> boolean exists(Example<S> example);
}
可以发现,每个方法中都包含一个Example对象,现在学习下。。
Example
public interface Example<T> {
static <T> Example<T> of(T probe) {
return new TypedExample<>(probe, ExampleMatcher.matching());
}
static <T> Example<T> of(T probe, ExampleMatcher matcher) {
return new TypedExample<>(probe, matcher);
}
//实体参数
T getProbe();
//匹配器
ExampleMatcher getMatcher();
//回顾一下我们上一课时讲解的类型,这个是返回实体参数的Class Type;
@SuppressWarnings("unchecked")
default Class<T> getProbeType() {
return (Class<T>) ProxyUtils.getUserClass(getProbe().getClass());
}
}
TypedExample 这个类不是 public 的,看如下源码:
@ToString
@EqualsAndHashCode
@RequiredArgsConstructor(access = AccessLevel.PACKAGE)
@Getter
class TypedExample<T> implements Example<T> {
private final @NonNull T probe;
private final @NonNull ExampleMatcher matcher;
}
我们发现三个类:Probe、ExampleMatcher 和 Example,具体用法以及分析后续学习补充~
本文地址:https://blog.csdn.net/CodersCoder/article/details/110247164
推荐阅读
-
荐 一篇文章带你快速入门 Spring Data JPA
-
Spring Data Jpa 中级联操作CascadeType的含义
-
Spring Data Jpa+SpringMVC+Jquery.pagination.js实现分页示例
-
springboot使用spring-data-jpa操作MySQL数据库
-
Spring学习笔记之RedisTemplate的配置与使用教程
-
Spring Data JPA 实现多表关联查询的示例代码
-
Spring Data JPA+kkpager实现分页功能实例
-
Spring Boot与Docker部署实践
-
Spring学习笔记之RedisTemplate的配置与使用教程
-
Spring Data Jpa+SpringMVC+Jquery.pagination.js实现分页示例