【MyBatis】| MyBatis分页插件PageHelper
目录
一:MyBatis使⽤PageHelper
1. limit分⻚
(1)概念:
①页码:pageNum(用户会发送请求,携带页码pageNum给服务器)
②每页显示的记录条数:pageSize,例如:百度默认的是每页展示10条记录
③实际上每一次在进行分页请求发送的时候,都是要发送两个数据:pageNum和pageSize给服务器
④实际上前端提交表单的数据格式应如下:uri?pageNum=1&pageSize=10,后端调用request.getParameter方法获取到对应的页码和每页显示的记录条数
(2)mysql当中的分页SQL应该怎么写?
①使用limit关键字,语法格式:limit startIndex,pageSize
②第⼀个数字:startIndex(起始下标,下标从0开始)
③第⼆个数字:pageSize(每⻚显示的记录条数)
④假设已知⻚码pageNum,还有每⻚显示的记录条数pageSize,那么第⼀个数字是可以动态的获取的:startIndex = (pageNum - 1) * pageSize
(3)标准通⽤的mysql分⻚SQL:
select *
from tableName ......
limit (pageNum - 1) * pageSize, pageSize
(4)使用limit关键字编写代码进行分页
三兄弟之一:CarMapper接口,编写方法
package com.bjpowernode.mybatis.mapper;
import com.bjpowernode.mybatis.pojo.Car;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface CarMapper {
/**
* 分页查询
* @param startIndex 起始下标
* @param pageSize 每页显示的记录条数
* @return
*/
List<Car> selectAllByPage(@Param("startIndex") int startIndex, @Param("pageSize") int pageSize);
}
三兄弟之二:CarMapper.xml文件,编写sql语句
<?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.bjpowernode.mybatis.mapper.CarMapper">
<select id="selectAllByPage" resultType="Car" >
select * from t_car limit #{startInde},#{pageSize}
</select>
</mapper>
三兄弟之三:CarMappeTest类,用来编写测试类
package com.bjpowernode.mybatis.test;
import com.bjpowernode.mybatis.mapper.CarMapper;
import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class CarMapperTest {
@Test
public void testSelectAllByPage(){
// 应该是从前端获取到页码
int pageNum = 2;
// 应该是从前端获取到每页显示的条数
int pageSize = 2;
// 起始下标
int startIndex = (pageNum-1)*pageSize;
SqlSession sqlSession = SqlSessionUtil.openSession();
CarMapper mapper = sqlSession.getMapper(CarMapper.class);
List<Car> cars = mapper.selectAllByPage(startIndex, pageSize);
cars.forEach(car -> System.out.println(car));
sqlSession.close();
}
}
执行结果:
对应的是数据库表中:起始下标为2开始的后两条数据(下标从0开始)
(5)其实获取数据并不难,难的是获取分⻚相关的数据⽐较难(例如:总记录条数、是否有上/下一页、分页的导航显示多少个);这些可以借助mybatis的PageHelper插件。
2. PageHelper插件
使⽤PageHelper插件进⾏分⻚,更加的便捷!
第一步:pom.xml中引入依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.3.1</version>
</dependency>
第二步:在mybatis-config.xml⽂件中配置插件
<!--mybatis分页的拦截器-->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
第三步:编写Java代码
三兄弟之一:CarMapper接口,编写方法
package com.bjpowernode.mybatis.mapper;
import com.bjpowernode.mybatis.pojo.Car;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface CarMapper {
/**
* 查询所有的Car,通过分页查询插件PageHelper完成
* @return
*/
List<Car> selectAll();
}
三兄弟之二:CarMapper.xml文件,编写sql语句
使用了分页插件PageHelper就不需要使用limit关键字了,直接正常查询即可!
<?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.bjpowernode.mybatis.mapper.CarMapper">
<select id="selectAll" resultType="Car">
select * from t_car
</select>
</mapper>
三兄弟之三:CarMappeTest类,用来编写测试类
注:在执行DQL语句之前,开启分页功能!
调用PageHelper的startPage(pageNum,pageSize)方法:
①第一个参数是页码pageNum;
②第二个参数还是每页显示的记录条数pageSize;
package com.bjpowernode.mybatis.test;
import com.bjpowernode.mybatis.mapper.CarMapper;
import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import com.github.pagehelper.PageHelper;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class CarMapperTest {
@Test
public void testSelectAll(){
SqlSession sqlSession = SqlSessionUtil.openSession();
CarMapper mapper = sqlSession.getMapper(CarMapper.class);
// 在执行DQL语句之前,开启分页
int pageNum = 2; // 第二页
int pageSize = 3; // 每页显示的条数
PageHelper.startPage(pageNum,pageSize); // 开启分页
List<Car> cars = mapper.selectAll();
cars.forEach(car -> System.out.println(car));
sqlSession.close();
}
}
执行结果:实际上PageHelper是在SQL语句后面自动加上了limit关键字
第2页,每页显示的条数是3,对应的数据库表中的数据就是:
第四步:获取PageInfo对象
关键点:
①在查询语句之前,开启分⻚功能!
②在查询语句之后,封装PageInfo对象(PageInfo对象将来会存储到request域当中,在⻚⾯上展示)!
package com.bjpowernode.mybatis.test;
import com.bjpowernode.mybatis.mapper.CarMapper;
import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class CarMapperTest {
@Test
public void testSelectAll(){
SqlSession sqlSession = SqlSessionUtil.openSession();
CarMapper mapper = sqlSession.getMapper(CarMapper.class);
// 1. 在执行DQL语句之前,开启分页
int pageNum = 1; // 第一页
int pageSize = 3; // 每页显示的条数
PageHelper.startPage(pageNum,pageSize);
// 2. 执行SQL语句
List<Car> cars = mapper.selectAll();
// 3. 执行DQL之后,封装PageInfo对象,new PageInfo对象
// 第二个参数就是分页导航的卡片个数
PageInfo<Car> carPageInfo = new PageInfo<>(cars, 3);
System.out.println(carPageInfo);
sqlSession.close();
}
}
执行结果:
列举几个常用的属性:
①pageNum-页码, pageSize-每页显示的记录, size=3-代表显示的当前多少页, startRow-从第几条数据开始, endRow-从第几条数据结束, total-总记录条数, pages-页数,
②prePage-上一页的页码, nextPage-下一页的页码, isFirstPage-,是否是第一页 isLastPage-是否是最后一页, hasPreviousPage-有没有上一页, hasNextPage-有没有下一页
③navigatePages-导航页码, navigateFirstPage-导航第一页是几, navigateLastPage-导航最后一页是几, navigatepageNums-存在数据的导航页
怎么用?
在javaweb当中,调用request.setAttribute("pageInfo",carPageInfo)方法,把数据放到request域当中;然后从request域当中取出分页的信息,在前端进行展示!
相关文章
- JavaWeb_(Mybatis框架)MyBatis整合Spring框架
- JavaWeb_(Mybatis框架)MyBatis Generator简单入门
- 【异常及源码分析】org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping
- mybatis简单案例源码详细【注释全面】——Dao层接口(UserMapper.java)
- 【死磕jeesite源码】mybatis动态调用表名和字段名
- mybatis-generator自动生成代码插件
- IDEA的 mybatis插件报错 - IDE Fatal Errors
- Mybatis 异常: The content of elements must consist of well-formed character data or markup
- MyBatis Generator插件之SerializablePlugin
- Java_Mybatis_注解代理写法
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- Mybatis核心配置文件SqlMapConfig.xml独立使用配置内容
- Atitit mybatis topic file list Total 300ge (9+条消息)MyBatis框架核心之(五)注解使用resultMap及多表查询 - 弱弱的猿 - CSD
- Atitit spring5 集成 mybatis 注解班
- 【MyBatis笔记10】Mybatis中几个动态SQL标签和内置参数
- 【MyBatis笔记08】Mybatis中常用的一些操作
- 【项目实战】使用MyBatis-Plus乐观锁插件功能
- MyBatis快速入门——第五章、maven整合Mybatis&Servlet_tomcat
- MyBatis快速入门——第四章、mybatis动态sql_foreach
- MyBatis 源代码阅读笔记 1 基于XML配置的代码编写 mybatis-config.xml
- [DB][mybatis]MyBatis mapper文件引用变量#{}与${}差异
- java-mybaits-010-mybatis-spring-使用 SqlSession、注入映射器
- Java-idea-mybatis plugin插件使用
- Mybatis使用PageHelper分页插件报错Could not find method on interface ibatis.executor.Executor named query.
- MyBatis原来做的是这些事2
- 【项目实战】使用MyBatis-Plus乐观锁插件功能
- MyBatis之工作原理,简单实体的增加、修改、删除、查询_Mybatis-原理总结
- Mybatis源码分析之(二)根据配置文件创建SqlSessionFactory(Configuration的创建过程)