上一小节我们整合了druid,点击查看,我们接着整合分页插件,分页是我们项目中非常常用的功能,通过整合pagehelper分页插件,可以实现项目中快速分页。
1. pom.xml文件中增加pagehelper依赖
<!-- pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
2.配置pagehelper插件,新增mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<package name="com.demo.model" />
</typeAliases>
<!-- 配置分页插件 PageHelper -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
</plugin>
</plugins>
</configuration>
在application.properties 配置加载mybatis-config.xml
mybatis.config-location=classpath:/mybatis-config.xml
3. 编写mapper的xml文件,因为我之前的UserInfoMapper.xml是工具生成的,所以我这里在/src/main/resources/mapper/的目录下新建了ext文件夹,存放UserInfoExtMapper.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.demo.mapper.ext.UserInfoExtMapper" >
<resultMap id="BaseResultMap" type="com.demo.model.UserInfo" >
<id column="id" property="id" jdbcType="BIGINT" />
<result column="username" property="username" jdbcType="VARCHAR" />
<result column="password" property="password" jdbcType="VARCHAR" />
<result column="email" property="email" jdbcType="VARCHAR" />
<result column="created" property="created" jdbcType="TIMESTAMP" />
<result column="updated" property="updated" jdbcType="TIMESTAMP" />
</resultMap>
<sql id="Base_Column_List" >
id, username, password, email, created, updated
</sql>
<select id="selectByPage" resultMap="BaseResultMap" >
select
<include refid="Base_Column_List" />
from user_info
</select>
</mapper>
注意里面的selectByPage方法,只有查询,是没有limit的,因为接下来pagehelper会帮助我们完成这个事情;selectByPage方法也可以写在原先的UserInfoMapper.xml里面。
4. 同样的,Mapper接口我也新建了一个com.demo.mapper.ext.UserInfoExtMapper,同样也是可以放在原有的UserInfoMapper.java里面。
package com.demo.mapper.ext;
import com.demo.model.UserInfo;
import com.github.pagehelper.Page;
public interface UserInfoExtMapper {
Page<UserInfo> selectByPage();
}
注意里面的Page是com.github.pagehelper.Page,不要弄错了哦。
5. 在UserInfoService.java中新增方法
public PageInfo<UserInfo> selectByPage(int pageNo, int pageSize);
实现类:UserInfoServiceImpl.java
@Override
public PageInfo<UserInfo> selectByPage(int pageNo, int pageSize) {
PageHelper.startPage(pageNo,pageSize);
List<UserInfo> list = userInfoExtMapper.selectByPage();
PageInfo<UserInfo> page = new PageInfo<UserInfo>(list);
return page;
}
只需简单的几行代码,分页完成。com.github.pagehelper.PageInfo里面会有具体的分页信息,包括总记录数,页数等等
6.测试类
@Test
public void selectByPage() {
System.err.println(JSON.toJSONString(userInfoService.selectByPage(2, 2)));
}
运行测试类,可以看到正确的打印结果。
我这里还增加了一个UserInfoController.java
@RestController
public class UserInfoController {
@Autowired
private UserInfoService userInfoService;
/**
*
* 分页查询
*
* @param pageNo
* @param pageSize
* @return
*/
@GetMapping("/page")
public PageInfo<UserInfo> selectByPage(@RequestParam(value="pageNo", defaultValue="1")int pageNo,
@RequestParam(value="pageSize",defaultValue="10") int pageSize) {
PageInfo<UserInfo> page = userInfoService.selectByPage(pageNo, pageSize);
return page;
}
}
启动项目,在浏览器访问http://localhost:8080/page?pageNo=2&pageSize=2,显示结果: