使用 Spring 和 specification-arg-resolver 实现 find all
Posted
技术标签:
【中文标题】使用 Spring 和 specification-arg-resolver 实现 find all【英文标题】:Implement find all with Spring and specification-arg-resolver 【发布时间】:2019-12-02 20:28:36 【问题描述】:我想用 specification-arg-resolver 和 Spring 实现查找 Angular 的所有功能。
我正在尝试发送这个网址:
[HPM] GET /api/be/find?name=tes&login=tes&allowed_ip_address=tes&page=0&size=10
使用specification-arg-resolver实现
public Page<BeDTO> getAllBySpecification(
@And(
@Spec(path = "name", spec = LikeIgnoreCase.class),
@Spec(path = "login", spec = LikeIgnoreCase.class),
@Spec(path = "allowed_ip_address", spec = LikeIgnoreCase.class)
) Specification<Be> specification,
Pageable pageable
)
return merchantService.getAllBySpecification(specification, pageable)
当我将name
的参数发送到login
时,它工作正常。
但是当我发送所有 3 个参数来实现 All
搜索功能时,我什么也得不到。看来我需要一些不同的规格配置。
你知道为什么它不能正常工作吗?
进入日志我得到:
select * from merchants merchants0_ where (upper(merchants0_.name) like ?) and (upper(merchants0_.login) like ?) and (upper(merchants0_.allowed_ip_address) like ?) limit ?
【问题讨论】:
您是否尝试通过指定参数和路径来重写规范 @Spec(path="name.merchants", params="name", spec=LikeIgnoreCase.class) ? 不,你能给我举个例子吗? 1.将您的 BE 实体添加到问题中。 2. 试试这个规范:@And( @Spec(path = "name", params="name", spec = LikeIgnoreCase.class), @Spec(path = "login", params="login", spec = LikeIgnoreCase .class), @Spec(path = "allowed_ip_address", params="allowed_ip_address", spec = LikeIgnoreCase.class) 你确定数据库中有对应的行吗?代码看起来没问题,生成的查询也没问题。 是的,对于单个搜索字符串,它工作正常。 【参考方案1】:您可以在 HQL 查询中传递名称、登录名和 ip_address,而不是使用 Specification 类。
public Page<BeDTO> getAllBySpecification(String name,String login,String ip_address,
Pageable pageable
)
return merchantService.getAllBySpecification(name,login,ip_address pageable);
select * from Merchants as merchants where merchants.name like %:name% and merchants.login like %:login% and merchants.allowed_ip_address like %:allowed_ip_address%
【讨论】:
以上是关于使用 Spring 和 specification-arg-resolver 实现 find all的主要内容,如果未能解决你的问题,请参考以下文章
使用Spring Boot JPA Specification实现使用JSON数据来查询实体数据
spring data jpa Specification 复杂查询+分页查询
Spring boot中使用springfox来生成Swagger Specification小结
Spring data jpa 实现简单动态查询的通用Specification方法