mybatis分页,使用pagehelper插件

mybatis分页,使用pagehelper插件

pagehelper是一个Mybatis的分页插件, 负责将已经写好的sql语句, 进行分页加工。
官网说法:如果你也在用 MyBatis,建议尝试该分页插件,这一定是最方便使用的分页插件。分页插件支持任何复杂的单表、多表分页。

优点:无需你自己去封装以及关心sql分页等问题,使用很方便,前端取数据也很方便。

引入依赖:

<dependency>
  	<groupId>com.github.pagehelper</groupId>
   	<artifactId>pagehelper</artifactId>
   	<version>5.1.10</version>
</dependency>

案例:

所有依赖:
<dependencies>
        <!-- MySQL依赖 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

        <!-- mybatis依赖 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>

        <!-- 分页插件依赖 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.10</version>
        </dependency>
        
    </dependencies>

数据库:
CREATE TABLE t_customer(
   id INT PRIMARY KEY AUTO_INCREMENT,
   name VARCHAR(20),
   gender CHAR(1),
   telephone VARCHAR(20)
);
insert into t_customer VALUES
(null,'小红','男','14523655632'),
(null,'小宋','女','15245235698'),
(null,'小王','男','18856324563'),
(null,'小张','女','18478965412'),
(null,'小李','男','19278964125');
select * from t_customer;
全局配置文件:
<?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>

    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <!-- 数据库方言 -->
            <property name="helperDialect" value="mysql"/>
            <!-- 合理化分页 -->
            <property name="reasonable" value="true"/>
        </plugin>
    </plugins>
    
    <!-- 1.数据库连接信息-->
    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="jdbc"></transactionManager>
            <dataSource type="pooled">
                <!--
                中文乱码:useUnicode=true&amp;characterEncoding=utf8
                -->
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf8"/>
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 引入映射 -->
    <mappers>
        <mapper resource="mapper/CustomerDao1.xml"/>
    </mappers>

</configuration>
表示层:
package com.yl.entity;

/**
 * @ClassName: CustomerInfo
 * @Author 小袁兄弟
 * @Date: 2021/1/19 11:30
 * @QQ: 1758906065
 * @Aphorism: 苦心人天不负,自助者天助!
 * 实践是检验真理的唯一标准。
 */

// 分页插件
public class CustomerInfo {
    private Integer id;
    private String name;
    private String gender;
    private String telephone;

   // 此处省略  get  set  有参构造  toString方法
}

dao类接口:
public interface CustomerDao {
    /*
    * 查询所有用户
    * */
    public List<CustomerInfo> findAll();
}
dao类的映射文件:
<?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">
<!--
   namespace: 用于指定该映射文件需要映射的Dao接口
-->
<mapper namespace="com.yl.dao.CustomerDao">
    <!-- 为findAll方法映射SQL语句 -->
    <!--
       id: 需要映射的方法名称
       resultType: 返回值需要封装的对象类型
           注意:如果是集合类型,只需要指定集合中的存放元素类型即可
     -->
    <select id="findAll" resultType="com.yl.entity.CustomerInfo">
        select * from t_customer
    </select>
</mapper>
测试分页文件:
package com.yl.test;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.yl.dao.CustomerDao;
import com.yl.entity.CustomerInfo;
import com.yl.utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

/**
 * @ClassName: TestPage
 * @Author 小袁兄弟
 * @Date: 2021/1/19 11:44
 * @QQ: 1758906065
 * @Aphorism: 苦心人天不负,自助者天助!
 * 实践是检验真理的唯一标准。
 */
public class TestPage {

    @Test
    public void Test01(){
        // 获取SQLSession对象(MyBatisUtils:是一个自定义工具类)
        SqlSession sqlSession = MyBatisUtils.getSessioc();
        // 生成dao代理对象
        CustomerDao customerDao = sqlSession.getMapper(CustomerDao.class);
        // 设置分页参数
        // 页数
        int pageNun=2;
        // 每页显示条数
        int pageSize=4;
        PageHelper.startPage(pageNun,pageSize);
        // 查询用户数据
        List<CustomerInfo> list = customerDao.findAll();
        // 把用户数据封装到PageInfo分页结果对象
        PageInfo<CustomerInfo> page = new PageInfo<>(list);
        // 取出PageInfo的属性
        // 测试PageInfo全都属性
        System.out.println("当前页码:"+page.getPageNum());
        System.out.println("每页显示条数:"+page.getPageSize());
        System.out.println("当前起始行号:"+page.getStartRow());
        System.out.println("当前结束行号:"+page.getEndRow());
        System.out.println("总记录数:"+page.getTotal());
        System.out.println("总页数:"+page.getPages());
        System.out.println("是否为第一页:"+page.isIsFirstPage());
        System.out.println("是否为最后一页:"+page.isIsLastPage());
        System.out.println("是否有上一页:"+page.isHasPreviousPage());
        System.out.println("是否有下一页:"+page.isHasNextPage());
        System.out.println("当前页数据:");
        for (CustomerInfo c:page.getList()){
            System.out.println(c);
        }
        // 7.关闭连接
        sqlSession.close();
    }
}

上一篇:springboot使用分页插件,,返回的数据中total总是为0


下一篇:Mybatis使用分页插件实现分页