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&characterEncoding=utf8
-->
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&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();
}
}