Mybatis学习目录
上一篇:(十三)MyBatis的逆向工程
下一篇:(十五)MyBatis的注解式开发
数据库:汽车表t_car
引⼊依赖:mysql驱动依赖、mybatis依赖、logback依赖、junit依赖。
引入配置文件:jdbc.properties、mybatis-config.xml、logback.xml
SqlSession工具类:SqlSessionUtil
都可以复制之前的
在Mysql当中的limit语句有两个参数:
select * from t_car limit 参数一,参数二
参数一:起始下标,默认下标从0开始(startIndex)
参数二:显示的记录条数(pageSize)
假设已知页码pageNum,还有每页显示的记录条数pageSize,那么参数一就可以动态获取
startIndex = (pageNum - 1) * pageSize
所以,标准通用的Mysql分页SQL:
select
*
from
表 ......
limit
(pageNum - 1) * pageSize, pageSize
创建CarMapper接口,添加方法:
/**
* 分页查询,原生limit
* @param startIndex 起始下标
* @param pageSize 每页记录条数
* @return
*/
List<Car> selectByPage(@Param("startIndex") int startIndex, @Param("pageSize") int pageSize);
创建CarMapper.xml文件配置:
<select id="selectByPage" resultType="car">
select *
from t_car
limit #{startIndex},#{pageSize}
</select>
测试程序:
@Test
public void testSelectByPage(){
SqlSession session = SqlSessionUtil.getSession();
CarMapper mapper = session.getMapper(CarMapper.class);
int pageSize = 3;//每页显示条数
int pageNum = 3; //显示第几页
//计算开始下标
int startIndex = (pageNum-1)*pageSize;
List<Car> cars = mapper.selectByPage(startIndex,pageSize);
cars.forEach(car -> System.out.println(car));
}
获取数据不难,难的是获取分页相关的数据比较难。可以借助mybatis的PageHelper插件。
使用PageHelper步骤:
第一步:引入依赖
<!--mybatis的插件pagehelper-->
<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接口添加方法:
/**
* 查询所有,通过分页查询插件PageHelper
* @return
*/
List<Car> selectAll();
在CarMapper.xml配置:
不用使用limit关键字
<select id="selectAll" resultType="car">
select *
from t_car
</select>
@Test
public void testSelectByPageHelper(){
SqlSession session = SqlSessionUtil.getSession();
CarMapper mapper = session.getMapper(CarMapper.class);
//在执行DQL语句之前,需要开启分页功能
int pageSize = 3;//每页显示条数
int pageNum = 2; //显示第几页
PageHelper.startPage(pageNum,pageSize);
List<Car> cars = mapper.selectAll();
cars.forEach(car -> System.out.println(car));
}
在查询语句之后封装PageInfo对象。(PageInfo对象将来会存储到request域当中。在页面上展示。)
程序:
@Test
public void testSelectByPageHelper1(){
SqlSession session = SqlSessionUtil.getSession();
CarMapper mapper = session.getMapper(CarMapper.class);
//在执行DQL语句之前,需要开启分页功能
int pageSize = 3;//每页显示条数,将来从前端获取
int pageNum = 2; //显示第几页,也是从前端获取
PageHelper.startPage(pageNum,pageSize);
List<Car> cars = mapper.selectAll();
//PageInfo对象是PageHelper插件提供用来封装分页信息的对象。
//这个对象将来会存储到request当中,传给前端展示
PageInfo<Car> carPageInfo = new PageInfo<>(cars, 2);
//我们可以输出看运行这个对象的信息
System.out.println(carPageInfo);
}
发现这个对象有很多信息
PageInfo{pageNum=2, pageSize=3, size=3, startRow=4, endRow=6, total=8, pages=3,
list=Page{count=true, pageNum=2, pageSize=3, startRow=3, endRow=6, total=8, pages=3, reasonable=false, pageSizeZero=false}
[Car{id=28, carNum='333', brand='帕萨特3', guidePrice=30.0, produceTime='2020-11-11', carType='燃油车'},
Car{id=29, carNum='8888', brand='兰博基尼X', guidePrice=100.0, produceTime='2020-1-1', carType='燃油车'},
Car{id=30, carNum='5555', brand='比亚迪T', guidePrice=30.0, produceTime='2020-11-11', carType='新能源'}],
prePage=1, nextPage=3, isFirstPage=false, isLastPage=false, hasPreviousPage=true, hasNextPage=true,
navigatePages=2, navigateFirstPage=1, navigateLastPage=2, navigatepageNums=[1, 2]}
这些信息分别表示: