Spring Boot 2.x 小新功能 – Spring Da

作者: 程序员泥瓦匠 | 来源:发表于2017-09-21 12:51 被阅读442次

    本文提纲

    一、前言

    二、运行 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

    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    4.0.0

    spring.boot.core

    chapter-5-spring-boot-paging-sorting

    0.0.1-SNAPSHOT

    jar

    chapter-5-spring-boot-paging-sorting

    第五章数据分页排序案例

    org.springframework.boot

    spring-boot-starter-parent

    2.0.0.M4

    UTF-8

    UTF-8

    1.8

    org.springframework.boot

    spring-boot-starter-web

    org.springframework.boot

    spring-boot-starter-test

    test

    org.springframework.boot

    spring-boot-starter-data-jpa

    com.h2database

    h2

    runtime

    org.springframework.boot

    spring-boot-maven-plugin

    1.5.1.RELEASE

    spring-milestones

    Spring Milestones

    https://repo.spring.io/libs-milestone

    false

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

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

    ## 是否显示 SQL 语句

    spring.jpa.show-sql=true

    ## DATA WEB 相关配置 {@link SpringDataWebProperties}

    ## 分页大小 默认为 20

    spring.data.web.pageable.default-page-size=3

    ## 当前页参数名 默认为 page

    spring.data.web.pageable.page-parameter=pageNumber

    ## 当前页参数名 默认为 size

    spring.data.web.pageable.size-parameter=pageSize

    ## 字段排序参数名 默认为 sort

    spring.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 interfaceUserRepositoryextendsPagingAndSortingRepository {

    }

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

    最重要的是,

    PagingAndSortingRepository 提供了两个接口

    Iterable findAll(Sort sort);

    Page findAll(Pageable pageable);

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

    4.用户业务层实现类 UserServiceImpl

    /**

    * User 业务层实现

    *

    * Created by bysocket on 18/09/2017.

    */

    @Service

    public classUserServiceImplimplementsUserService {

    private static finalLoggerLOGGER= LoggerFactory.getLogger(UserServiceImpl.class);

    @Autowired

    UserRepositoryuserRepository;

    @Override

    publicPage findByPage(Pageable pageable) {

    LOGGER.info("\n分页查询用户:"

    +" PageNumber = "+ pageable.getPageNumber()

    +" PageSize = "+ pageable.getPageSize());

    returnuserRepository.findAll(pageable);

    }

    @Override

    publicUser insertByUser(User user) {

    LOGGER.info("新增用户:"+ user.toString());

    returnuserRepository.save(user);

    }

    }

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

    5.用户控制层 UserController

    /**

    * 用户控制层

    *

    * Created by bysocket on 18/09/2017.

    */

    @RestController

    @RequestMapping(value ="/users")// 通过这里配置使下面的映射都在 /users

    public classUserController {

    @Autowired

    UserServiceuserService;// 用户服务层

    /**

    *  获取用户分页列表

    *    处理 "/users" 的 GET 请求,用来获取用户分页列表

    *    通过 @RequestParam 传递参数,进一步实现条件查询或者分页查询

    *

    *    Pageable 支持的分页参数如下

    *    page - 当前页 从 0 开始

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

    */

    @RequestMapping(method = RequestMethod.GET)

    publicPage getUserPage(Pageable pageable) {

    returnuserService.findByPage(pageable);

    }

    /**

    *  创建用户

    *    处理 "/users" 的 POST 请求,用来获取用户列表

    *    通过 @RequestBody 绑定实体类参数

    */

    @RequestMapping(value ="/create", method = RequestMethod.POST)

    publicUser postUser(@RequestBodyUser user) {

    returnuserService.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 技术峰会-文末社区送福利

    最好的赞赏

    就是你的关注

    相关文章

      网友评论

        本文标题:Spring Boot 2.x 小新功能 – Spring Da

        本文链接:https://www.haomeiwen.com/subject/yvpzsxtx.html