SpringBoot+Mybatis集成pagehelper分页插件

Bertha 。 2022-12-26 10:12 223阅读 0赞

目录

1、说明

2、配置pom文件

3、增加配置文件

4、在controller中增加分页查询请求

5、疑惑


1、说明

后台使用springboot2.0+Mybatis已经搭建好的环境,要在这个基础上实现后端数据查询分页。

分页当然也可以自己写,不过有现成的插件,只需要几步简单的集成就行,而且截止目前感觉还可以,因而有此篇记录。

2、配置pom文件

与其他springboot集成插件一样,先导入pageHelper依赖包,在pom.xml 的 dependencies标签中增加如下:

  1. <!--集成druid-->
  2. <dependency>
  3. <groupId>com.alibaba</groupId>
  4. <artifactId>druid-spring-boot-starter</artifactId>
  5. <version>1.1.10</version>
  6. </dependency>
  7. <!--集成分页插件-->
  8. <dependency>
  9. <groupId>com.github.pagehelper</groupId>
  10. <artifactId>pagehelper-spring-boot-starter</artifactId>
  11. <version>1.2.5</version>
  12. </dependency>

3、增加配置文件

同样,在application中配置分页插件需要的相关配置

  1. spring:
  2. datasource:
  3. # driver-class-name: com.mysql.cj.jdbc.Driver
  4. url: jdbc:mysql://localhost:3306/apidemo?serverTimezone=UTC&useSSL=true&useUniCode=true&characterEncoding=UTF-8
  5. username: root
  6. password: root
  7. # 使用druid数据源
  8. type: com.alibaba.druid.pool.DruidDataSource
  9. driver-class-name: com.mysql.cj.jdbc.Driver
  10. filters: stat
  11. maxActive: 20
  12. initialSize: 1
  13. maxWait: 60000
  14. minIdle: 1
  15. timeBetweenEvictionRunsMillis: 60000
  16. minEvictableIdleTimeMillis: 300000
  17. validationQuery: select 'x'
  18. testWhileIdle: true
  19. testOnBorrow: false
  20. testOnReturn: false
  21. poolPreparedStatements: true
  22. maxOpenPreparedStatements: 20

4、在controller中增加分页查询请求

  1. 注意:这里我认为你的后端环境之前就是好的,只是没有分页,也就是说下面代码中的sysUserService.selectUserList()
  2. 方法就是最基本的一个全量查询的mybatis语句
  3. /**
  4. * 分页查询
  5. * @param pageNum 当前页数
  6. * @param pageSize 每页的记录条数
  7. * @return
  8. */
  9. @GetMapping("/findUserListByPage")
  10. public PageInfo<SysUser> getUserBySearch(
  11. @RequestParam("pageNum") int pageNum,
  12. @RequestParam("pageSize") int pageSize) {
  13. // TODO Auto-generated method stub
  14. PageHelper.startPage(pageNum,pageSize);
  15. List<SysUser> list= sysUserService.selectUserList();
  16. PageInfo<SysUser> pageInfo = new PageInfo(list);
  17. pageInfo.toString();
  18. return pageInfo;
  19. }

还是给大家把它补全…

  1. @Service
  2. @Transactional
  3. public class SysUserServiceImpl implements SysUserService {
  4. @Autowired
  5. private SysUserMapper sysUserMapper;
  6. @Override
  7. public List<SysUser> selectUserList() {
  8. return sysUserMapper.selectUserList();
  9. }
  10. @Override
  11. public int addUser(SysUser user) {
  12. return sysUserMapper.addUser(user);
  13. }
  14. @Override
  15. public int updateUserById(SysUser user) {
  16. return sysUserMapper.updateUserById(user);
  17. }
  18. @Override
  19. public int deleteUserById(String id) {
  20. return sysUserMapper.deleteUserById(id);
  21. }
  22. @Override
  23. public SysUser findById(String id) {
  24. return sysUserMapper.findById(id);
  25. }
  26. }
  27. package com.shijia.apidemo.dao;
  28. import com.shijia.apidemo.pojo.SysUser;
  29. import org.apache.ibatis.annotations.Mapper;
  30. import org.springframework.stereotype.Repository;
  31. import java.util.List;
  32. /**
  33. * 用户dao层接口
  34. */
  35. @Mapper
  36. @Repository
  37. public interface SysUserMapper {
  38. /**
  39. * 查询列表
  40. * @return
  41. */
  42. List<SysUser> selectUserList();
  43. /**
  44. * 添加用户
  45. * @param user
  46. * @return
  47. */
  48. int addUser(SysUser user);
  49. /**
  50. * 更新用户
  51. * @param user
  52. * @return
  53. */
  54. int updateUserById(SysUser user);
  55. /**
  56. * 删除用户
  57. * @param id
  58. * @return
  59. */
  60. int deleteUserById(String id);
  61. SysUser findById(String id);
  62. }

SysUserMapper.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.shijia.apidemo.dao.SysUserMapper">
  6. <!--通过<resultMap>映射实体类属性名和表的字段名对应关系 -->
  7. <resultMap type="com.shijia.apidemo.pojo.SysUser" id="sysUserResultMap">
  8. <!-- 用userId属性来映射主键字段 -->
  9. <id property="userId" column="user_id"/>
  10. <!-- 用result属性来映射非主键字段 -->
  11. <result property="userName" column="user_name"/>
  12. </resultMap>
  13. <select id="selectUserList" resultMap="sysUserResultMap" >
  14. select * from sys_user
  15. </select>
  16. </mapper>

还有一点,我没有自己写PageInfo,就用的pageHelper自身的PageInfo,看看其返回的格式:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3l5ajEwODMxNw_size_16_color_FFFFFF_t_70

最终效果:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3l5ajEwODMxNw_size_16_color_FFFFFF_t_70 1

5、疑惑

其实看看其代码,刚开始发现就是在我们调用自己的未分页查询之前,开启了pagehelper的一行代码

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3l5ajEwODMxNw_size_16_color_FFFFFF_t_70 2

所有就想,那是不是我后端还是做了全量查询,只是返给前端的数据是按照分页返回的,如果是这样,那也太那啥了,这个插件也就没有用的价值了,于是开启了日志看了看后台打印的sql

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3l5ajEwODMxNw_size_16_color_FFFFFF_t_70 3

这下明白了,查询的时候本质和我们做分页查询一样,使用了sql 的limit语句,然后会查询一个总数,这下就放心了。。。。

发表评论

表情:
评论列表 (有 0 条评论,223人围观)

还没有评论,来说两句吧...

相关阅读