jooq 分页排序
JOOQ是一个库,可以帮助我们控制SQL。 它可以从我们的数据库生成代码,并允许我们使用其流畅的API来构建类型安全的数据库查询。
本教程前面的部分向我们介绍了如何配置应用程序的应用程序上下文,如何从数据库生成代码以及将CRUD操作添加到jOOQ存储库。
这次,我们将学习如何实现支持排序和分页的简单搜索功能。
让我们开始吧。
补充阅读:
- 将jOOQ与Spring结合使用:配置是本教程的第一部分,它描述了您可以配置使用jOOQ的Spring应用程序的应用程序上下文。 您可以在不阅读本教程第一部分的情况下了解此博客文章,但是,如果您想在Spring支持的应用程序中真正使用jOOQ,建议您也阅读本教程的第一部分。
- 将jOOQ与Spring结合使用:代码生成是本教程的第二部分,它描述了如何对数据库进行反向工程并创建代表不同数据库表,记录等的jOOQ查询类。 因为这些类是类型安全SQL查询的构建块, 所以建议您在阅读本博客文章之前阅读本教程的第二部分 。
- 在Spring中使用jOOQ:CRUD描述了如何为管理待办事项的简单应用程序添加CRUD操作。 因为它涵盖了使用Spring创建jOOQ存储库所需的信息, 所以建议您在阅读此博客文章之前先阅读它 。
向Web层添加分页和排序支持
当我们实现必须同时支持分页和排序的搜索功能时,我们必须找出一种方法来向后端提供页码,页面大小,排序字段的名称和排序顺序。
我们当然可以实现一个支持此功能的组件,但它并不像听起来那么简单。 创建一个HandlerMethodArgumentResolver很容易,它可以从HTTP请求中找到此信息并将其转换为对象,然后将该对象作为方法参数传递给我们的控制器方法。 问题在于,存在许多“例外”情况,这使该任务非常棘手。 例如,
- 如果从HTTP请求中找不到此信息,则必须回退到默认值。
- 如果缺少所需的信息(例如,没有指定页面大小就给出了页码),我们必须退回到默认值或向REST API用户返回错误。
幸运的是,我们不必实现此组件。 Spring Data Commons项目具有一个组件 , 该组件从HTTP请求中提取分页和排序信息,并允许我们将该信息注入到控制器方法中。
让我们发现我们可以使用Maven获得Spring Data Commons二进制文件。
使用Maven获取所需的依赖关系
通过将以下依赖项声明添加到POM文件的依赖项部分,我们可以使用Maven获得所需的二进制文件:
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
<version>1.7.1.RELEASE</version>
</dependency>
下一步是对示例应用程序的应用程序上下文配置进行一些更改。 让我们继续前进,找出我们必须进行的更改。
配置应用程序上下文
我们可以通过对应用程序上下文配置类进行简单的更改来启用Spring Data的Web分页支持,该类配置了示例应用程序的Web层。 我们必须使用@EnableSpringDataWebSupport批注来批注配置类。 这样可以确保所需的bean自动注册。
@EnableSpringDataWebSupport批注的API文档提供了有关使用此批注时注册的bean的更多信息。
WebAppContext类的相关部分如下所示:
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.web.config.EnableSpringDataWebSupport;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
@ComponentScan({
"net.petrikainulainen.spring.jooq.common.controller",
"net.petrikainulainen.spring.jooq.todo.controller"
})
@EnableWebMvc
@EnableSpringDataWebSupport
public class WebAppContext extends WebMvcConfigurerAdapter {
//Other methods are omitted for the sake of clarity
}
这就对了。 现在,我们对示例应用程序的应用程序上下文配置进行了必要的更改。 让我们找出如何在应用程序中使用Web分页支持。
使用网页分页
当我们想对查询结果进行排序和分页时,我们必须遵循以下步骤:
- 将分页和排序配置添加到HTTP请求。
- 将Pageable方法参数添加到控制器方法。
首先 ,我们可以使用以下请求参数将分页和排序配置添加到HTTP请求:
- 页面请求参数指定请求的页码。
- size request参数指定所请求页面的大小。
- 排序请求参数指定用于对查询结果进行排序的属性。 此请求参数的此值必须遵循以下语法: property,property(,ASC | DESC) 。 如果未给出排序方向,则结果将按升序排序。 如果要切换排序顺序,则必须使用多个排序参数(例如?sort = title&sort = id,desc )。
其次 ,我们必须在我们的控制器方法中添加一个Pageable方法参数。 TodoController类的相关部分如下所示:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import java.util.List;
@RestController
@RequestMapping("/api/todo