MyBatis分页原理
MyBatis分页主要是通过拦截器(Interceptor)来实现的,当执行查询操作时,拦截器会对SQL语句进行拦截,然后修改SQL语句,添加分页相关的关键字和参数,最后执行修改后的SQL语句。
MyBatis分页实现步骤
1、引入MyBatis分页插件PageHelper
在项目的pom.xml文件中添加PageHelper依赖:
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.2.0</version> </dependency>
2、配置MyBatis分页插件
在MyBatis的配置文件mybatisconfig.xml中添加PageHelper插件配置:
<configuration> ... <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <!配置参数 > <property name="helperDialect" value="mysql"/> <property name="reasonable" value="true"/> <property name="supportMethodsArguments" value="true"/> <property name="params" value="count=countSql"/> </plugin> </plugins> ... </configuration>
3、使用PageHelper进行分页查询
在需要进行分页查询的地方,调用PageHelper的静态方法startPage()设置分页参数,然后执行查询操作。
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class UserService { @Autowired private SqlSessionFactory sqlSessionFactory; public PageInfo<User> findUsersByPage(int pageNum, int pageSize) { // 开始分页,设置当前页码和每页显示的记录数 PageHelper.startPage(pageNum, pageSize); // 获取SqlSession对象,执行查询操作 try (SqlSession sqlSession = sqlSessionFactory.openSession()) { UserMapper userMapper = sqlSession.getMapper(UserMapper.class); List<User> users = userMapper.findAll(); // 封装分页信息到PageInfo对象中返回 return new PageInfo<>(users); } } }
4、编写Mapper接口和映射文件,实现查询操作
编写UserMapper接口和对应的映射文件UserMapper.xml:
UserMapper接口:
package com.example.mapper; import com.example.entity.User; import java.util.List; public interface UserMapper { List<User> findAll(); }
UserMapper.xml:
<?xml version="1.0" encoding="UTF8"?> <!DOCTYPE mapper PUBLIC "//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis3mapper.dtd"> <mapper namespace="com.example.mapper.UserMapper"> <select id="findAll" resultType="com.example.entity.User"> SELECT * FROM user_table WHERE 1=1 LIMIT #{offset}, #{pageSize} </select> </mapper>
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/649788.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复