SpringBoot+Mybatis集成pagehelper分页插件
目录
1、说明
2、配置pom文件
3、增加配置文件
4、在controller中增加分页查询请求
5、疑惑
1、说明
后台使用springboot2.0+Mybatis已经搭建好的环境,要在这个基础上实现后端数据查询分页。
分页当然也可以自己写,不过有现成的插件,只需要几步简单的集成就行,而且截止目前感觉还可以,因而有此篇记录。
2、配置pom文件
与其他springboot集成插件一样,先导入pageHelper依赖包,在pom.xml 的 dependencies标签中增加如下:
<!--集成druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!--集成分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
3、增加配置文件
同样,在application中配置分页插件需要的相关配置
spring:
datasource:
# driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/apidemo?serverTimezone=UTC&useSSL=true&useUniCode=true&characterEncoding=UTF-8
username: root
password: root
# 使用druid数据源
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
filters: stat
maxActive: 20
initialSize: 1
maxWait: 60000
minIdle: 1
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: select 'x'
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxOpenPreparedStatements: 20
4、在controller中增加分页查询请求
注意:这里我认为你的后端环境之前就是好的,只是没有分页,也就是说下面代码中的sysUserService.selectUserList()
方法就是最基本的一个全量查询的mybatis语句
/**
* 分页查询
* @param pageNum 当前页数
* @param pageSize 每页的记录条数
* @return
*/
@GetMapping("/findUserListByPage")
public PageInfo<SysUser> getUserBySearch(
@RequestParam("pageNum") int pageNum,
@RequestParam("pageSize") int pageSize) {
// TODO Auto-generated method stub
PageHelper.startPage(pageNum,pageSize);
List<SysUser> list= sysUserService.selectUserList();
PageInfo<SysUser> pageInfo = new PageInfo(list);
pageInfo.toString();
return pageInfo;
}
还是给大家把它补全…
@Service
@Transactional
public class SysUserServiceImpl implements SysUserService {
@Autowired
private SysUserMapper sysUserMapper;
@Override
public List<SysUser> selectUserList() {
return sysUserMapper.selectUserList();
}
@Override
public int addUser(SysUser user) {
return sysUserMapper.addUser(user);
}
@Override
public int updateUserById(SysUser user) {
return sysUserMapper.updateUserById(user);
}
@Override
public int deleteUserById(String id) {
return sysUserMapper.deleteUserById(id);
}
@Override
public SysUser findById(String id) {
return sysUserMapper.findById(id);
}
}
package com.shijia.apidemo.dao;
import com.shijia.apidemo.pojo.SysUser;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* 用户dao层接口
*/
@Mapper
@Repository
public interface SysUserMapper {
/**
* 查询列表
* @return
*/
List<SysUser> selectUserList();
/**
* 添加用户
* @param user
* @return
*/
int addUser(SysUser user);
/**
* 更新用户
* @param user
* @return
*/
int updateUserById(SysUser user);
/**
* 删除用户
* @param id
* @return
*/
int deleteUserById(String id);
SysUser findById(String id);
}
SysUserMapper.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.shijia.apidemo.dao.SysUserMapper">
<!--通过<resultMap>映射实体类属性名和表的字段名对应关系 -->
<resultMap type="com.shijia.apidemo.pojo.SysUser" id="sysUserResultMap">
<!-- 用userId属性来映射主键字段 -->
<id property="userId" column="user_id"/>
<!-- 用result属性来映射非主键字段 -->
<result property="userName" column="user_name"/>
</resultMap>
<select id="selectUserList" resultMap="sysUserResultMap" >
select * from sys_user
</select>
</mapper>
还有一点,我没有自己写PageInfo,就用的pageHelper自身的PageInfo,看看其返回的格式:
最终效果:
5、疑惑
其实看看其代码,刚开始发现就是在我们调用自己的未分页查询之前,开启了pagehelper的一行代码
所有就想,那是不是我后端还是做了全量查询,只是返给前端的数据是按照分页返回的,如果是这样,那也太那啥了,这个插件也就没有用的价值了,于是开启了日志看了看后台打印的sql
这下明白了,查询的时候本质和我们做分页查询一样,使用了sql 的limit语句,然后会查询一个总数,这下就放心了。。。。
还没有评论,来说两句吧...