Spring-Data还提供了Web模块的支持,这要求Web组件Spring-MVC的jar包位于classpath下。通常通过使用@EnableSpringDataWebSupport注解来启用继承支持。

SpringDataWebAutoConfiguration上已经添加了@EnableSpringDataWebSupport注解,我们不需要再额外配置。

  

一、EnableSpringDataWebSupport会为我们注册几个组件:

  1、DomainClassConverter:可以直接让我们在Spring-MVC控制器的方法参数列表中使用实体类型,而无需通过Repository手动查找实例(需要Repository实现CrudRepository才有资格被发现可以进行转换)。

1.1、Controller:

/**
*
* @author caofanqi
*/
@RestController
@RequestMapping("/user")
public class UserController { /**
* 这里会直接调用User对应的Repository来进行findById查询。
* 需要Repository实现CrudRepository才有资格被发现可以进行转换
*/
@GetMapping("/{id}")
public User findUserById(@PathVariable("id")User user){
return user;
}
}

1.2、单元测试:

@SpringBootTest
@AutoConfigureMockMvc
class UserControllerTest { @Resource
private MockMvc mockMvc; @Test
void findUserById() throws Exception { String result = this.mockMvc.perform(get("/user/47"))
.andDo(print())
.andExpect(status().isOk())
.andReturn().getResponse().getContentAsString(); System.out.println(result); }
}

  

  2、HandlerMethodArgumentResolvers:还为我们注册了PageableHandlerMethodArgumentResolver和SortHandlerMethodArgumentResolver让Pageable和Sort可以作为控制层方法参数。

2.1、Pageable或Sort作为控制层方法参数

  参数page:当前页,默认为0;参数size:每页大小,默认20;参数sort:排序方向,如果不同的方向使用多个sort参数。

    /**
* 参数page:默认为0。
* 参数size:默认为20。
* 参数sort:排序按property,property(,ASC|DESC)的方式来填写,默认为升序,如果想要属性有不同的排序方向,要用多个sort参数
*/
@GetMapping
public Page<User> listUser(Pageable pageable){
System.out.println("page:" + pageable.getPageNumber());
System.out.println("size:" + pageable.getPageSize());
System.out.println("sort:" + pageable.getSort());
return userRepository.findAll(pageable);
} @GetMapping("/sort")
public String sort(Sort sort){
System.out.println("sort:" + sort);
return "sort";
}
    @Test
void listUser1() throws Exception {
String result = this.mockMvc.perform(get("/user"))
.andExpect(status().isOk())
.andReturn().getResponse().getContentAsString(); System.out.println(result);
} @Test
void listUser2() throws Exception {
String result = this.mockMvc.perform(get("/user")
.param("page","2").param("size","2").param("sort","username,asc")
.param("sort","age,desc"))
.andExpect(status().isOk())
.andReturn().getResponse().getContentAsString(); System.out.println(result);
}

2.2、如果有多个分页或排序时(多个表),用@Qualifier来解决,请求参数要以${qualifier}_开头

    @GetMapping("/multi/pageable")
public String multiPageable(@Qualifier("user") Pageable userPageable, @Qualifier("book") Pageable bookPageable){
System.out.println("userPageable page:" + userPageable.getPageNumber());
System.out.println("userPageable size:" + userPageable.getPageSize());
System.out.println("userPageable sort:" + userPageable.getSort()); System.out.println("bookPageable page:" + bookPageable.getPageNumber());
System.out.println("bookPageable size:" + bookPageable.getPageSize());
System.out.println("bookPageable sort:" + bookPageable.getSort());
return "test";
}
    @Test
void multiPageable() throws Exception {
this.mockMvc.perform(get("/user/multi/pageable")
.param("user_page","2").param("user_size","2").param("user_sort","username,asc").param("user_sort","age,desc")
.param("book_page","20").param("book_size","20").param("book_sort","bookName").param("book_sort","price,desc"))
.andExpect(status().isOk());
}

  

二、使用@PageableDefault自定义pageable

  我们也可以通过@PageableDefault来自定义默认值

    /**
* 使用@PageableDefault自定义pageable
*/
@GetMapping("pageable/default")
public String pageableDefault(@PageableDefault(page = 2,size = 20,sort = {"username","age"},direction = Sort.Direction.DESC) Pageable pageable){
System.out.println("page:" + pageable.getPageNumber());
System.out.println("size:" + pageable.getPageSize());
System.out.println("sort:" + pageable.getSort());
return "PageableDefault";
}
    @Test
void pageableDefault() throws Exception {
this.mockMvc.perform(get("/user/pageable/default"))
.andExpect(status().isOk());
}

  

三、properties中的属性配置

  Spring-Data还为我们提供了一些定制化配置,可以修改常见的是否将1作为第一页,默认是0,定制参数的名字,和每页最大数量等。

#是否将1为第一页
spring.data.web.pageable.one-indexed-parameters=true
#pageable默认每页大小
spring.data.web.pageable.default-page-size=10
#每页大小最大值
spring.data.web.pageable.max-page-size=100
#当前页参数名
spring.data.web.pageable.page-parameter=pageIndex
#每页大小参数名
spring.data.web.pageable.size-parameter=pageSize
#排序参数名
spring.data.web.sort.sort-parameter=pageSort
#page和size参数的前缀,不会影响sort的参数名称
spring.data.web.pageable.prefix=pre
#多参数时分隔符
spring.data.web.pageable.qualifier-delimiter=-

源码地址:https://github.com/caofanqi/study-spring-data-jpa

学习Spring-Data-Jpa(十七)---对Web模块的支持的更多相关文章

  1. 学习Spring Data JPA

    简介 Spring Data 是spring的一个子项目,在官网上是这样解释的: Spring Data 是为数据访问提供一种熟悉且一致的基于Spring的编程模型,同时仍然保留底层数据存储的特​​殊 ...

  2. 学习-spring data jpa

    spring data jpa对照表 Keyword Sample JPQL snippet And findByLastnameAndFirstname - where x.lastname = ? ...

  3. 【Spring Data 系列学习】了解 Spring Data JPA 、 Jpa 和 Hibernate

    在开始学习 Spring Data JPA 之前,首先讨论下 Spring Data Jpa.JPA 和 Hibernate 之前的关系. JPA JPA 是 Java Persistence API ...

  4. Spring Data Jpa 入门学习

    本文主要讲解 springData Jpa 入门相关知识, 了解JPA规范与Jpa的实现,搭建springboot+dpringdata jpa环境实现基础增删改操作,适合新手学习,老鸟绕道~ 1. ...

  5. spring data jpa入门学习

    本文主要介绍下spring data jpa,主要聊聊为何要使用它进行开发以及它的基本使用.本文主要是入门介绍,并在最后会留下完整的demo供读者进行下载,从而了解并且开始使用spring data ...

  6. SpringBoot学习笔记:Spring Data Jpa的使用

    更多请关注公众号 Spring Data Jpa 简介 JPA JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范(JSR ...

  7. 一步步学习 Spring Data 系列之JPA(二)

    继上一篇文章对Spring Data JPA更深( )一步剖析. 上一篇只是简单的介绍了Spring Data JPA的简单使用,而往往在项目中这一点功能并不能满足我们的需求.这是当然的,在业务中查询 ...

  8. Spring Data JPA 学习记录1 -- 单向1:N关联的一些问题

    开新坑 开新坑了(笑)....公司项目使用的是Spring Data JPA做持久化框架....学习了一段时间以后发现了一点值得注意的小问题.....与大家分享 主要是针对1:N单向关联产生的一系列问 ...

  9. Spring Boot入门第二天:一个基于Spring Boot的Web应用,使用了Spring Data JPA和Freemarker。

    原文链接 今天打算从数据库中取数据,并展示到视图中.不多说,先上图: 第一步:添加依赖.打开pom.xml文件,添加必要的依赖,完整代码如下: <?xml version="1.0&q ...

随机推荐

  1. jmeter Dashboard Report

    说明:详情参考:https://jmeter.apache.org/usermanual/generating-dashboard.html JMeter3.0以后引入了Dashboard Repor ...

  2. C++中STL中简单的Vector的实现

    该vector只能容纳标准库中string类, 直接上代码了,StrVec.h文件内容为: #ifndef STRVEC_H #define STRVEC_H #include<iostream ...

  3. Django框架(十一)--cookie和session

    cookie和session组件 cookie 1.cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它 ...

  4. Java CookieUtils

    Java CookieUtils /** * <html> * <body> * <P> Copyright 1994 JsonInternational</ ...

  5. httpd服务的配置及应用

    一.httpd服务的配置文件 httpd服务的主配置文件通常为httpd根目录下的conf/httpd.conf文件,通过yum安装的httpd服务的主配置路径通常如下: httpd-2.2:/etc ...

  6. selenium浏览器自动化测试框架文档(修正版)

    写在最前面:目前自动化测试并不属于新鲜的事物,或者说自动化测试的各种方法论已经层出不穷,但是,能够在项目中持之以恒的实践自动化测试的团队,却依旧不是非常多.有的团队知道怎么做,做的还不够好:有的团队还 ...

  7. v-for循环列表,展开样式随手风琴

    <div class="product_box" v-for="(item,index) of kinds" :key="index" ...

  8. JavaWeb 之 三层架构:软件设计架构

    界面层(表示层):用户看的得界面.用户可以通过界面上的组件和服务器进行交互. 业务逻辑层:处理业务逻辑的. 数据访问层:操作数据存储文件.

  9. Firebird 审计追踪

    Firebird 打开审计追踪功能,即在服务器上打开日志记录功能,根据配置记录不同类型的服务器执行情况. 1.首先修改Firebird.conf文件,打开审计功能: AuditTraceConfigF ...

  10. 笔谈kxmovie开源播放器库的使用

    开源播放器项目 kxmovie(https://github.com/kolyvan/kxmovie),现在仍然是很多刚开始接触播放器开发的程序员的参照范本.以下是我操作kxmovie项目的过程: ( ...