本文在前一篇教程的基础上,使用常用的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相关依赖包
在pom.xml中添加依赖
完整的pom.xml文件
在application.properties中添加pagehelper配置
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql
说明:
helperDialect
:分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。你也可以配置helperDialect属性来指定分页插件使用哪种方言。reasonable
&#xff1a;分页合理化参数&#xff0c;默认值为false。当该参数设置为 true 时&#xff0c;pageNum<&#61;0 时会查询第一页&#xff0c; pageNum>pages&#xff08;超过总数时&#xff09;&#xff0c;会查询最后一页。默认false 时&#xff0c;直接根据参数进行查询。params
&#xff1a;用于从对象中根据属性名取值&#xff0c; 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable&#xff0c;不配置映射的用默认值&#xff0c; 默认值为pageNum&#61;pageNum;pageSize&#61;pageSize;count&#61;countSql;reasonable&#61;reasonable;pageSizeZero&#61;pageSizeZerosupportMethodsArguments
&#xff1a;默认值false&#xff0c;分页插件会从查询方法的参数值中&#xff0c;自动根据上面 params 配置的字段中取值&#xff0c;查找到合适的值时就会自动分页。更多信息参考pagehelper官网
## 服务器端口&#xff0c;如果不配置默认是8080端口
server.port&#61;8096 ## 数据库设置
spring.datasource.driver-class-name&#61;com.mysql.cj.jdbc.Driver
spring.datasource.url&#61;jdbc:mysql://192.168.0.99:3306/qikegu_demo?serverTimezone&#61;UTC&useUnicode&#61;true&characterEncoding&#61;utf8
spring.datasource.username&#61;root
spring.datasource.password&#61;qazwsx## mybatis配置
# 指向映射类目录
mybatis.type-aliases-package&#61;com.qikegu.demo.model
# 指向映射xml文件目录
mybatis.mapper-locations&#61;classpath:mapper/*.xml## pagehelper
pagehelper.helperDialect&#61;mysql
pagehelper.reasonable&#61;true
pagehelper.supportMethodsArguments&#61;true
pagehelper.params&#61;count&#61;countSql
pagehelper使用方法有好几种&#xff0c;这里我们介绍最常用的2种&#xff1a;
//方法1&#xff0c;Mapper接口方式的调用&#xff0c;推荐这种使用方式。
PageHelper.startPage(1, 10); // pageNum&#61;1, pageSize&#61;10
List
//方法2&#xff0c;参数方法调用
//存在以下 Mapper 接口方法&#xff0c;你不需要在 xml 处理后两个参数
public interface CountryMapper {List
}
//配置supportMethodsArguments&#61;true
//在代码中直接调用&#xff1a;
List
本文例子采取方法1&#xff0c;更多方法参考pagehelper官网
添加我们要实现的功能&#xff1a;列出所有用户&#xff0c;分页返回结果。下面几个文件需要修改&#xff1a;
如图&#xff1a;
新增一个函数
&#64;RequestMapping(value&#61;"", method &#61; RequestMethod.GET, produces&#61;"application/json")public PageInfo
说明&#xff1a;
此函数是接口的控制层&#xff0c;其中
&#64;RequestParam
注解获取url中的?page&#61;1&page-size&#61;5
参数&#xff0c;value&#61;"page"
是url中的参数名&#xff0c;required
指参数是否必须&#xff0c;如果是必须URL却没有这个参数会报错&#xff0c;defaultValue&#61;"1"
缺省值PageInfo
PageInfo包装结果&#xff0c;返回更多分页相关信息完整代码&#xff1a;
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;&#64;RestController
&#64;EnableAutoConfiguration
&#64;RequestMapping("/user")
public class UserController {// 注入mapper类&#64;Resourceprivate UserService userService;&#64;RequestMapping(value&#61;"{id}", method&#61;RequestMethod.GET, produces&#61;"application/json")public User getUser(&#64;PathVariable long id) throws Exception {User user &#61; this.userService.getUserById(id);return user;}&#64;RequestMapping(value&#61;"", method &#61; RequestMethod.GET, produces&#61;"application/json")public PageInfo
UserService.java新增一个接口
public List
UserServiceImpl.java新增上面接口的实现
&#64;Overridepublic List
说明&#xff1a;
请看代码注释
完整代码&#xff1a;
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
}
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;&#64;Service("userService")
public class UserServiceImpl implements UserService {//注入mybatis数据库查询类&#64;Resourceprivate UserMapper userMapper;&#64;Overridepublic User getUserById(long userId) {return userMapper.selectByPrimaryKey(userId);}&#64;Overridepublic List
}
UserMapper.java 新增接口
// 列出用户&#xff0c;对应xml映射文件元素的IDList
UserMapper.xml 该接口新增mybatis xml实现
说明
请看代码注释
完整代码
UserMapper.java
package com.qikegu.demo.repository;import java.util.List;import com.qikegu.demo.model.User;public interface UserMapper {// 查询某个用户&#xff0c;对应xml映射文件元素的IDUser selectByPrimaryKey(long id);// 列出用户&#xff0c;对应xml映射文件元素的IDList
}
UserMapper.xml
Eclipse左侧&#xff0c;在项目根目录上点击鼠标右键弹出菜单&#xff0c;选择&#xff1a;run as -> spring boot app
运行程序。
我们使用Postman访问接口&#xff0c;Postman是一款很强大的接口测试工具&#xff0c;很常用称得上是“居家旅行必备”&#xff0c;推荐使用。安装很简单&#xff0c;去官网下载一个&#xff0c;按照步骤安装就可以了。运行结果如下&#xff1a;
分页功能可以说是web开发中的必备功能&#xff0c;本文在前一篇教程的基础上&#xff0c;介绍了mybatis pagehelper插件的集成过程&#xff0c;pagehelper是一款常用的分页插件&#xff0c;具有和Mapper.xml完全解耦的优点&#xff0c;推荐在项目中使用。
完整代码