Spring Boot 集成教程
- Spring Boot 介绍
- Spring Boot 开发环境搭建(Eclipse)
- Spring Boot Hello World (restful接口)例子
- spring boot 连接Mysql
- spring boot配置druid连接池连接mysql
- spring boot集成mybatis(1)
- spring boot集成mybatis(2) – 使用pagehelper实现分页
- spring boot集成mybatis(3) – mybatis generator 配置
- spring boot 接口返回值封装
- spring boot输入数据校验(validation)
- spring boot rest 接口集成 spring security(1) – 最简配置
- spring boot rest 接口集成 spring security(2) – JWT配置
- spring boot 异常(exception)处理
- spring boot 环境配置(profile)切换
- spring boot redis 缓存(cache)集成
概述
本文在前一篇教程的基础上,使用常用的pagehelper插件,添加分页功能。本文将实现一个列出所有用户的接口,分页返回结果
准备数据
数据库和数据表都使用前面章节 [spring boot集成mybatis(1)] 用过的,因为要分页,表里需要插入更多数据。
mysql命令行客户端连接数据库
mysql -h localhost -u root -p
插入数据的sql语句:
INSERT INTO `qikegu_demo`.`user` (`nickname`, `mobile`, `password`) VALUES ('abc3', '13512345603', '123');
INSERT INTO `qikegu_demo`.`user` (`nickname`, `mobile`, `password`) VALUES ('abc4', '13512345604', '123');
INSERT INTO `qikegu_demo`.`user` (`nickname`, `mobile`, `password`) VALUES ('abc5', '13512345605', '123');
INSERT INTO `qikegu_demo`.`user` (`nickname`, `mobile`, `password`) VALUES ('abc6', '13512345606', '123');
INSERT INTO `qikegu_demo`.`user` (`nickname`, `mobile`, `password`) VALUES ('abc7', '13512345607', '123');
INSERT INTO `qikegu_demo`.`user` (`nickname`, `mobile`, `password`) VALUES ('abc8', '13512345608', '123');
INSERT INTO `qikegu_demo`.`user` (`nickname`, `mobile`, `password`) VALUES ('abc9', '13512345609', '123');
INSERT INTO `qikegu_demo`.`user` (`nickname`, `mobile`, `password`) VALUES ('abc10', '13512345610', '123');
项目依赖
不创建新项目,重用章节 [spring boot集成mybatis(1)] 里的项目,没有项目请按该文创建。
Eclipse打开该项目,在pom.xml文件中,添加依赖:pagehelper-spring-boot-starter,引入pagehelper相关依赖包
添加依赖:pagehelper-spring-boot-starter
在pom.xml中添加依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.10</version>
</dependency>
完整的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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.qikegu</groupId>
<artifactId>springboot-mybatis-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-mybatis-demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.10</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
项目配置
添加pagehelper配置
在application.properties中添加pagehelper配置
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql
说明:
-
helperDialect
:分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。你也可以配置helperDialect属性来指定分页插件使用哪种方言。 -
reasonable
:分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询。 -
params
:用于从对象中根据属性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值, 默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero -
supportMethodsArguments
:默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。
更多信息参考pagehelper官网
application.properties完整内容
## 服务器端口,如果不配置默认是8080端口
server.port=8096
## 数据库设置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.0.99:3306/qikegu_demo?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=qazwsx
## mybatis配置
# 指向映射类目录
mybatis.type-aliases-package=com.qikegu.demo.model
# 指向映射xml文件目录
mybatis.mapper-locations=classpath:mapper/*.xml
## pagehelper
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql
添加代码
pagehelper 使用方法
pagehelper使用方法有好几种,这里我们介绍最常用的2种:
//方法1,Mapper接口方式的调用,推荐这种使用方式。
PageHelper.startPage(1, 10); // pageNum=1, pageSize=10
List<Country> list = countryMapper.selectIf(1);
//方法2,参数方法调用
//存在以下 Mapper 接口方法,你不需要在 xml 处理后两个参数
public interface CountryMapper {
List<Country> selectByPageNumSize(
@Param("user") User user,
@Param("pageNum") int pageNum,
@Param("pageSize") int pageSize);
}
//配置supportMethodsArguments=true
//在代码中直接调用:
List<Country> list = countryMapper.selectByPageNumSize(user, 1, 10);
本文例子采取方法1,更多方法参考pagehelper官网
代码实现
添加我们要实现的功能:列出所有用户,分页返回结果。下面几个文件需要修改:
- UserController.java - 控制层
- UserService.java & UserServiceImpl.java - 服务层
- UserMapper.java & UserMapper.xml - 数据访问层
如图:
UserController.java
新增一个函数
@RequestMapping(value="", method = RequestMethod.GET, produces="application/json")
public PageInfo<User> listUser(
@RequestParam(value="page", required=false, defaultValue="1") int page,
@RequestParam(value="page-size", required=false, defaultValue="5") int pageSize){
List<User> result = userService.listUser(page, pageSize);
// PageInfo包装结果,返回更多分页相关信息
PageInfo<User> pi = new PageInfo<User>(result);
return pi;
}
说明:
此函数是接口的控制层,其中
-
@RequestParam
注解获取url中的?page=1&page-size=5
参数,value="page"
是url中的参数名,required
指参数是否必须,如果是必须URL却没有这个参数会报错,defaultValue="1"
缺省值 -
PageInfo
PageInfo包装结果,返回更多分页相关信息
完整代码:
package com.qikegu.demo.controller;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.PathVariable;
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 com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.qikegu.demo.model.User;
import com.qikegu.demo.service.UserService;
@RestController
@EnableAutoConfiguration
@RequestMapping("/user")
public class UserController {
// 注入mapper类
@Resource
private UserService userService;
@RequestMapping(value="{id}", method=RequestMethod.GET, produces="application/json")
public User getUser(@PathVariable long id) throws Exception {
User user = this.userService.getUserById(id);
return user;
}
@RequestMapping(value="", method = RequestMethod.GET, produces="application/json")
public PageInfo<User> listUser(
@RequestParam(value="page", required=false, defaultValue="1") int page,
@RequestParam(value="page-size", required=false, defaultValue="5") int pageSize){
List<User> result = userService.listUser(page, pageSize);
// PageInfo包装结果,返回更多分页相关信息
PageInfo<User> pi = new PageInfo<User>(result);
return pi;
}
}
UserService.java & UserServiceImpl.java
UserService.java新增一个接口
public List<User> listUser(int page, int pageSize);
UserServiceImpl.java新增上面接口的实现
@Override
public List<User> listUser(int page, int pageSize) {
List<User> result = null;
try {
// 调用pagehelper分页,采用starPage方式。starPage应放在Mapper查询函数之前
PageHelper.startPage(page, pageSize); //每页的大小为pageSize,查询第page页的结果
PageHelper.orderBy("id ASC "); //进行分页结果的排序
result = userMapper.selectUser();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
说明:
请看代码注释
完整代码:
UserService.java
package com.qikegu.demo.service;
import java.util.List;
import com.qikegu.demo.model.User;
public interface UserService {
public User getUserById(long userId);
public List<User> listUser(int page, int pageSize);
}
UserServiceImpl.java
package com.qikegu.demo.service.impl;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.github.pagehelper.PageHelper;
import com.qikegu.demo.model.User;
import com.qikegu.demo.repository.UserMapper;
import com.qikegu.demo.service.UserService;
@Service("userService")
public class UserServiceImpl implements UserService {
//注入mybatis数据库查询类
@Resource
private UserMapper userMapper;
@Override
public User getUserById(long userId) {
return userMapper.selectByPrimaryKey(userId);
}
@Override
public List<User> listUser(int page, int pageSize) {
List<User> result = null;
try {
// 调用pagehelper分页,采用starPage方式。starPage应放在Mapper查询函数之前
PageHelper.startPage(page, pageSize); //每页的大小为pageSize,查询第page页的结果
PageHelper.orderBy("id ASC "); //进行分页结果的排序
result = userMapper.selectUser();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
UserMapper.java & UserMapper.xml
UserMapper.java 新增接口
// 列出用户,对应xml映射文件元素的ID
List<User> selectUser();
UserMapper.xml 该接口新增mybatis xml实现
<select id="selectUser" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from user
</select>
说明
请看代码注释
完整代码
UserMapper.java
package com.qikegu.demo.repository;
import java.util.List;
import com.qikegu.demo.model.User;
public interface UserMapper {
// 查询某个用户,对应xml映射文件元素的ID
User selectByPrimaryKey(long id);
// 列出用户,对应xml映射文件元素的ID
List<User> selectUser();
}
UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qikegu.demo.repository.UserMapper">
<resultMap id="BaseResultMap" type="com.qikegu.demo.model.User">
<constructor>
<idArg column="id" javaType="_long" jdbcType="BIGINT" />
<arg column="nickname" javaType="java.lang.String" jdbcType="VARCHAR" />
<arg column="mobile" javaType="java.lang.String" jdbcType="VARCHAR" />
<arg column="password" javaType="java.lang.String" jdbcType="CHAR" />
<arg column="role" javaType="java.lang.String" jdbcType="VARCHAR" />
</constructor>
</resultMap>
<sql id="Base_Column_List">
id, nickname, mobile, password, role
</sql>
<select id="selectByPrimaryKey" parameterType="_long" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from user
where id = #{id,jdbcType=BIGINT}
</select>
<select id="selectUser" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from user
</select>
</mapper>
运行
Eclipse左侧,在项目根目录上点击鼠标右键弹出菜单,选择:run as -> spring boot app
运行程序。
我们使用Postman访问接口,Postman是一款很强大的接口测试工具,很常用称得上是“居家旅行必备”,推荐使用。安装很简单,去官网下载一个,按照步骤安装就可以了。运行结果如下:
总结
分页功能可以说是web开发中的必备功能,本文在前一篇教程的基础上,介绍了mybatis pagehelper插件的集成过程,pagehelper是一款常用的分页插件,具有和Mapper.xml完全解耦的优点,推荐在项目中使用。
spring boot集成mybatis(2) - 使用pagehelper实现分页的更多相关文章
-
spring boot集成mybatis(1)
Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...
-
spring boot集成mybatis(3) - mybatis generator 配置
Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...
-
【spring boot】14.spring boot集成mybatis,注解方式OR映射文件方式AND pagehelper分页插件【Mybatis】pagehelper分页插件分页查询无效解决方法
spring boot集成mybatis,集成使用mybatis拖沓了好久,今天终于可以补起来了. 本篇源码中,同时使用了Spring data JPA 和 Mybatis两种方式. 在使用的过程中一 ...
-
Spring Boot集成MyBatis开发Web项目
1.Maven构建Spring Boot 创建Maven Web工程,引入spring-boot-starter-parent依赖 <project xmlns="http://mav ...
-
详解Spring Boot集成MyBatis的开发流程
MyBatis是支持定制化SQL.存储过程以及高级映射的优秀的持久层框架,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集. spring Boot是能支持快速创建Spring应用的Java框 ...
-
spring boot集成MyBatis 通用Mapper 使用总结
spring boot集成MyBatis 通用Mapper 使用总结 2019年 参考资料: Spring boot集成 MyBatis 通用Mapper SpringBoot框架之通用mapper插 ...
-
spring boot集成mybatis只剩两个sql 并提示 Cannot obtain primary key information from the database, generated objects may be incomplete
前言 spring boot集成mybatis时只生成两个sql, 搞了一个早上,终于找到原因了 找了很多办法都没有解决, 最后注意到生成sql的时候打印了一句话: Cannot obtain pri ...
-
spring boot集成mybatis分页插件
mybatis的分页插件能省事,本章记录的是 spring boot整合mybatis分页插件. 1.引入依赖 <!-- 分页插件pagehelper --> <dependency ...
-
spring boot 集成 Mybatis,JPA
相对应MyBatis, JPA可能大家会比较陌生,它并不是一个框架,而是一组规范,其使用跟Hibernate 差不多,原理层面的东西就不多讲了,主要的是应用. Mybatis就不多说了,SSM这三个框 ...
随机推荐
-
C# WebProxy POST 或者 GET
代理服务器无账号和密码的代理服务器: //创建请求 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); //实例化一个We ...
-
IOS屏幕布局
1.iPad和iPhone的屏幕布局 在IB中,屏幕或控件的尺寸以点为单位.在视网膜技术中,1个点包括4个像素,而没有采用视网膜屏幕技术的还是1个点包括1个像素. 2.绝对布局和相对布局 3.使用Au ...
-
11个实用jQuery日历插件
1. FullCalendar FullCalendar是很出名的jQuery日历插件,它支持拖拽等功能,整合了Google Calendar,而且可以通过JSON来绑定事件,设计师可以轻松地自定义日 ...
-
JSP入门2
1. CRUD是Create(创建).Read(读取).Update(更新)和Delete(删除)的缩写,一般应用有这四项也就足够了. 我们这里的例子是对联系人信息进行CRUD操作. 2. javab ...
-
SqlServer如何判断字段中是否含有汉字?
--/* --unicode编码范围: --汉字:[0x4e00,0x9fa5](或十进制[19968,40869]) --数字:[0x30,0x39](或十进制[48, 57]) --小写字母:[0 ...
-
SQA
SQA 一.SQA过程 首先组成一个团队,遵循敏捷开发的原则,进行分工合作,为软件开发编造一个用例故事,画出相应的图,小组讨论合作后写代码,软件质量保证(SQA-Software Quality As ...
-
ASP.Net在64位环境开发部署常见问题
越来越多的开发团队開始使用64位操作系统作为开发环境,也计划将应用部署在安装有64位操作系统的server上.对于ASP.Net开发人员来说.使用64位环境开发部署须要注意下面几个问题.可在项目过程中 ...
-
jQuery源码中的“new jQuery.fn.init()”什么意思?
所有文章搬运自我的个人主页:sheilasun.me 引子 最近打算试试看看jQuery的源码,刚开个头就卡住了.无论如何都理解不了jQuery源码入口部分中的 return new jQuery.f ...
-
BZOJ.3920.Yuuna的礼物(莫队 分块套分块 分段离散化)
题目链接 详细题解:https://www.cnblogs.com/autsky-jadek/p/4376091.html 代码参考自:https://www.cnblogs.com/Sakits/p ...
-
Vue 404页面处理
问题原因: 刷新页面时访问的资源在服务端找不到,因为vue-router设置的路径不是真实存在的路径 解决方案: 第一步:后端配置 Apache <IfModule mod_rewrite.c& ...