SpringBoot+Mybatis集成pagehelper分页插件

本文介绍了如何在SpringBoot项目中集成Mybatis的PageHelper分页插件,通过添加依赖、配置文件和修改Controller,实现后端数据的分页查询。在Controller中增加分页查询请求,并探讨了PageHelper的工作原理,确保它通过SQL的limit语句进行有效分页,而非仅在前端截取数据。

目录

 

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语句,然后会查询一个总数,这下就放心了。。。。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值