Spring Boot 2.x 小新功能 – Spring Data Web configuration

本文提纲

一、前言

二、运行 chapter-5-spring-boot-paging-sorting 工程

三、chapter-5-spring-boot-paging-sorting 工程配置详解

四、小结

运行环境:

Mac OS 10.12.x

JDK 8 +

Spring Boot 2.0.0.M4 

一、前言

Spring 2.x 更新了一个小小的功能即:

Spring Data Web configuration

Spring Boot exposes a new spring.data.web configuration namespace that allows to easily configure paging and sorting.

就是说,可以在 application.properties 中自定义分页和排序相关的默认值和参数名。

具体见地址:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0.0-M2-Release-Notes

二、运行工程

git clone 下载工程 spring-boot-core-book-demo ,项目地址见 GitHub -

https://github.com/JeffLi1993/spring-boot-core-book-demo。

1. 工程结构

项目结构如下图所示:

org.spring.springboot.controller - Controller 层

org.spring.springboot.domain - 实体类及数据操作层 DAO

org.spring.springboot.service - 业务逻辑层

PagingSortingApplication - 应用启动类

application.properties - 应用配置文件,应用启动会自动读取配置

具体详细结构如下:

├── pom.xml

└── src

    ├── main

    │   ├── java

    │   │   └── spring

    │   │       └── boot

    │   │           └── core

    │   │               ├── PagingSortingApplication.java

    │   │               ├── domain

    │   │               │   ├── User.java

    │   │               │   └── UserRepository.java

    │   │               ├── service

    │   │               │   ├── UserService.java

    │   │               │   └── impl

    │   │               │       └── UserServiceImpl.java

    │   │               └── web

    │   │                   └── UserController.java

    │   └── resources

    │       ├── application.properties

    │       └── static

    └── test

2.编译工程

在项目根目录 spring-boot-core-book-demo,运行 maven 指令去编译工程:

mvn clean install

3.运行工程

在 chapter-5-spring-boot-paging-sorting 工程中,右键运行 PagingSortingApplication 应用启动类的 main 函数。待控制台日志中看到启动成功后。

在 PostMan 工具中,新增用户几个:

POST http://localhost:8080/users/create

Content-Type: application/json

{

    "name":"javaer",

    "age":22,

    "birthday":"2019-09-19"

}

如图:

重复上面步骤,新增用户 13 个。

然后,调用分页查询用户列表接口:

GET http://localhost:8080/users?pageNumber=1&pageSize=3&orderBy=id,desc

如图:

可见,查询出第 2 页的用户数据,并且按 id 倒序。还有可见,返回了分页相关的数据:每页大小(这里是 3 个)、排序、总个数和总页数等。

从应用日志中也可以看出对应的 HQL : 

2017-09-20 14:46:16.630  INFO 14593 --- [nio-8080-exec-4] s.b.core.service.impl.UserServiceImpl    :  

 分页查询用户: PageNumber = 1 PageSize = 3

2017-09-20 14:46:16.703  INFO 14593 --- [nio-8080-exec-4] o.h.h.i.QueryTranslatorFactoryInitiator  : HHH000397: Using ASTQueryTranslatorFactory

Hibernate: select user0_.id as id1_0_, user0_.age as age2_0_, user0_.birthday as birthday3_0_, user0_.name as name4_0_ from user user0_ order by user0_.id desc limit ? offset ?

Hibernate: select count(user0_.id) as col_0_0_ from user user0_

三、工程配置详解

1.pom.xml

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion>

<groupId>spring.boot.core</groupId><artifactId>chapter-5-spring-boot-paging-sorting</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging>

<name>chapter-5-spring-boot-paging-sorting</name><description>第五章数据分页排序案例</description>

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.0.M4</version><relativePath/> <!-- lookup parent from repository -->    </parent>

<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties>

<dependencies>

<!-- Web 依赖 -->        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

<!-- 单元测试依赖 -->        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>

<!-- Spring Data JPA 依赖 :: 数据持久层框架 -->        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency>

<!-- h2 数据源连接驱动 -->        <dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency>

</dependencies>

<build><plugins><!-- Spring Boot Maven 插件 -->            <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>1.5.1.RELEASE</version></plugin></plugins></build>

<repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/libs-milestone</url><snapshots><enabled>false</enabled></snapshots></repository></repositories>

</project>

简单依赖了 Web 依赖、Spring Data JPA 依赖 :: 数据持久层框架,并且使用 h2 内存式数据源。

2.在 application.properties 应用配置文件,增加相关分页排序参数

## 是否显示 SQL 语句spring.jpa.show-sql=true

## DATA WEB 相关配置 {@link SpringDataWebProperties}## 分页大小 默认为 20spring.data.web.pageable.default-page-size=3## 当前页参数名 默认为 pagespring.data.web.pageable.page-parameter=pageNumber## 当前页参数名 默认为 sizespring.data.web.pageable.size-parameter=pageSize## 字段排序参数名 默认为 sortspring.data.web.sort.sort-parameter=orderBy

关于 Data Web 分页和排序相关的配置:

设置 spring.data.web.pageable.default-page-size 可修改分页大小,默认分页大小为 20

设置 spring.data.web.pageable.page-parameter 可修改当前页参数名,默认参数名为 page

设置 pring.data.web.pageable.size-parameter 可修改当前页参数名,默认参数名为 size

设置 spring.data.web.sort.sort-parameter 可修改字段排序参数名,默认参数名为 sort

这里我们修改了各个参数名。如果什么都不设置的话,分页排序查询接口地址如下:

GET http://localhost:8080/users?page=1&size=3&sort=id,desc

这里就是,Spring 2.x 更新了一个小小的功能即:

就是说,可以在 application.properties 中自定义分页和排序相关的默认值和参数名。

3.用户持久层操作接口 UserRepository

/**

 * 用户持久层操作接口 * * Created by bysocket on 18/09/2017. */public interface UserRepository extends PagingAndSortingRepository<User, Long> {

}

接口只要继承 PagingAndSortingRepository 类即可。默认会提供很多实现,比如 CRUD 相关的实现。支持的默认方法有: count(), findAll(), findOne(ID), delete(ID), deleteAll(), exists(ID), save(DomainObject), save(Iterable<DomainObject>)。

最重要的是,

PagingAndSortingRepository 提供了两个接口

    Iterable<T> findAll(Sort sort);

    Page<T> findAll(Pageable pageable);

用来支持 分页 和 排序 的获取数据接口。

4.用户业务层实现类 UserServiceImpl

/**

 * User 业务层实现 * * Created by bysocket on 18/09/2017. */@Servicepublic class UserServiceImpl implements UserService {

private static final Logger LOGGER = LoggerFactory.getLogger(UserServiceImpl.class);

@Autowired    UserRepository userRepository;

@Override    public Page<User> findByPage(Pageable pageable) {LOGGER.info(" \n 分页查询用户:"                + " PageNumber = " + pageable.getPageNumber()
+ " PageSize = " + pageable.getPageSize());return userRepository.findAll(pageable);
}

@Override    public User insertByUser(User user) {LOGGER.info("新增用户:" + user.toString());return userRepository.save(user);
}
}

这边没有具体的业务操作,就打印了对应业务层分页相关的参数。

5.用户控制层 UserController

/**

 * 用户控制层 * * Created by bysocket on 18/09/2017. */@RestController@RequestMapping(value = "/users")     // 通过这里配置使下面的映射都在 /userspublic class UserController {

@Autowired    UserService userService;          // 用户服务层

   /**     *  获取用户分页列表     *    处理 "/users" 的 GET 请求,用来获取用户分页列表     *    通过 @RequestParam 传递参数,进一步实现条件查询或者分页查询     *     *    Pageable 支持的分页参数如下     *    page - 当前页 从 0 开始     *    size - 每页大小 默认值在 application.properties 配置     */    @RequestMapping(method = RequestMethod.GET)public Page<User> getUserPage(Pageable pageable) {return userService.findByPage(pageable);
}

/**     *  创建用户     *    处理 "/users" 的 POST 请求,用来获取用户列表     *    通过 @RequestBody 绑定实体类参数     */    @RequestMapping(value = "/create", method = RequestMethod.POST)public User postUser(@RequestBody User user) {return userService.insertByUser(user);
}

}

这里实现了两个 HTTP 服务接口。这次主要在实现 getUserPage 方法,利用分页参数来进行。

page - 当前页 从 0 开始

size - 每页大小 默认值在 application.properties 配置

其他不明白的,可以git clone 下载工程 spring-boot-core-book-demo,工程代码注解很详细,项目地址见 GitHub -

https://github.com/JeffLi1993/spring-boot-core-book-demo。 

四、小结

还是温故知新,加上一些 Spring 2.x 小新功能 - Spring Data Web configuration

推荐:《泥瓦匠 5 年 Java 的成长感悟(上)

上一篇:《「北京站」ArchData 技术峰会-文末社区送福利

最好的赞赏

就是你的关注

时间: 2024-10-14 09:03:43

Spring Boot 2.x 小新功能 – Spring Data Web configuration的相关文章

《Spring Boot官方指南》(一)Spring Boot 文档

Spring Boot文档 本章将对Spring Boot的文档接口做一个简短的描述,它可以成为你阅读本书的一个向导,如果确实不感兴趣,您也可以跳过. 1.关于本文档 Spring Boot文档有html,pdf和epub格式,您可以在这里下载到最新本地的文档.您可以免费下载并分享本文档,不需要任何声明和授权. 2.获取帮助 如果您在使用Spring Boot的过程中遇到任何问题,我们非常乐意为为您提供帮助! 试试这个链接,这里总结大部分人使用Spring Boot的过程中遇到的问题,没准有你需

《深入实践Spring Boot》一第3章 Spring Boot界面设计3.1 模型设计

本节书摘来自华章出版社<深入实践Spring Boot>一书中的第3章,第3.1节,作者陈韶健,更多章节内容可以访问"华章计算机"公众号查看. 第3章 Spring Boot界面设计 用Spring Boot框架设计Web显示界面,我们还是使用MVC(Model View Controller,模型-视图-控制器)的概念,将数据管理.事件控制和界面显示进行分层处理,实现多层结构设计.界面设计,即视图的设计,主要是组织和处理显示的内容,界面上的事件响应最终交给了控制器进行处理

《深入实践Spring Boot》一第1章Spring Boot入门1.1 配置开发环境

第1章 Spring Boot入门 在使用Spring Boot框架进行各种开发体验之前,要先配置好开发环境.首先安装JDK,然后选择一个开发工具,如Eclipse IDE和IntelliJ IDEA(以下简称IDEA)都是不错的选择.对于开发工具的选择,本书极力推荐使用IDEA,因为它为Spring Boot提供了许多更好和更贴切的支持,本书的实例都是使用IDEA创建的.同时,还需要安装Apache Maven和Git客户端.所有这些都准备好之后,我们就能开始使用Spring Boot了. 1

【redis】5.spring boot项目中,直接在spring data jpa的Repository层使用redis +redis注解@Cacheable直接在Repository层使用,报错问题处理Null key returned for cache operation

spring boot整合redis:http://www.cnblogs.com/sxdcgaq8080/p/8028970.html 首先,明确一下问题的场景 之前在spring boot整合redis,关于redis的使用都是在repository层上再封装一层service层,在service层上使用的. 现在如果直接将redis的注解放在repository上使用,是个什么情况呢? 代码如下: 1.首先我有一个实体XxAdmin,主键为id 2.Xxadmin我写了一个AdminRep

【spring boot hibernate】hibernate命名策略spring.jpa.hibernate.naming-strategy不起作用

对于 spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy hibernate命名策略设置之后不起作用的处理方式:http://www.cnblogs.com/sxdcgaq8080/p/7890218.html,查看1.JPA hibernate命名策略即可   现在这里说一下原因,为什么不起作用: spring.jpa.hibernate.naming-strategy 设置命名策略,是

火狐4.0或引进新功能快速访问Web服务

9月30日消息,Mozilla基金会最近公布的资料显示,火狐4.0浏览器可能引进"应用标签"功能. 据国外媒体报道称,用户可能会经常访问一些Web服务--例如Gmail.Twitter等.火狐4.0将在窗口中"开辟"一块区域显示这些Web服务(也称谓应用),方便用户快速访问 它们. 作者:刘彦青

使用Spring Boot日志框架在已有的微服务代码中添加日志功能

引言:我们需要在已有的微服务代码中添加日志功能,用于输出需要关注的内容,这是最平常的技术需求了.由于我们的微服务代码是基于SpringBoot开发的,那么问题就转换为如何在Spring Boot应用程序中输出相应的日志. 在传统Java应用程序中,我们一般会使用类似Log4j这样的日志框架来输出日志,而不是直接在代码中通过System.out.println()来输出日志.为什么要这么做呢?原因有两点.其一,我们希望日志能输出到文件中,而不是输出到应用程序的控制台中,这样更加容易收集和分析.其二

微框架Spring Boot详解

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新 Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从 而使开发人员不再需要定义样板化的配置.通过这种方式,Boot致力于在蓬勃发 展的快速应用开发领域(rapid application development)成为领导者. 多年以来,Spring IO平台饱受非议的一点就是大量的XML配置以及复杂的依赖 管理.在去年的SpringOne 2GX会议上,Pivotal的CTO Adrian

Spring Cloud连载(3)Spring Boot简介与配置

本站小福利 点我获取阿里云优惠券 原文作者:杨大仙的程序空间 3 Spring Boot简介与配置   3.1 Spring Boot         Spring Cloud基于Spring Boot搭建,本小节将对Spring Boot作一个大致的讲解,读者知道Spring Boot作用即可. 3.1.1 Spring Boot简介         开发一个全新的项目,需要先进行开发环境的搭建,例如要确定技术框架以及版本,还要考虑各个框架之间的版本兼容问题,完成这些繁琐的工作后,还要对新项目