如何在spring数据jpa中全局限制选择计数?

时间:2015-11-11 12:22:32

标签: mysql spring-boot spring-data-jpa

最新项目我使用了Spring boot和Spring Data Jpa,在某些web界面中,用户可以动态搜索某些记录,例如。按创建日期搜索订单,按名称搜索商品等。因为存在许多搜索条件,例如名称,品牌,状态等。所以我使用Jpa Specification来实现动态搜索。因此,页面可以在查询参数下面传递给搜索记录,例如

GET /goods?search_LIKE_name=foo #fuzzy search goods by name
GET /goods?search_LIKE_name=foo&search_EQ_status=1 #fuzzy search goods by name and status

等等。

但如果页面没有任何传递,那么它将选择全部。我不希望这种情况发生。我知道mysql命令行有一个名为--select_limit的选项,那么如何全局配置它以限制选择计数呢?例如在application.properties

spring.sql_select_limit=1000

1 个答案:

答案 0 :(得分:1)

我不知道是否有全局配置,但我有一个相对简洁的本地解决方案。在控制器方法上,只需在分页之前使用注释@PageableDefaults(pageNumber = 0, value = x)

控制器方法:

public List<Item> fuzzySearch(Object filter, @PageableDefaults(pageNumber = 0, value = x) Pageable pageable) {}

如果缺少页面参数,将使用注释中指定的默认值。

编辑:

如果您设法将分页参数从请求重命名为 size page 并使用方法签名Pageable作为参数,则可以全局设置页面默认值而不是在需要的地方放置PageableDefaults注释。 只需覆盖扩展@Configuration的{​​{1}}类中的方法。

WebMvcConfigurerAdapter