目录
分页查询(不考虑条件查询版)
页面需求:
- 可以设置每页展示的记录数
- 可以选择展示第几页
- 可以跳转到第几页
Sql语句分析:
通过limit来进行分页即可
select * from emp limit 0,5
select * from emp limit 5,5
select * from emp limit 10,5
服务端返回数据:
服务端只需要返回查询到的数据和共有多少个查询结果即可。每页显示的记录数是前端预设好的,然后共有多少页也可以通过前端来计算。
分析结果:
因为服务端需要返回两种响应数据,但是一个方法只有一个返回值,所以考虑使用一个实体类来对结果进行封装,这里使用PageBean的实体类将两种返回结果进行封装然后再统一交给Result.success()结果中。
具体实现:
Mapper层:
Controller层:
前端发送过来的数据,如果形参名中跟前端对应数据名称一样,会自动进行映射匹配。
Service层:
章节小结:
使用分页插件—PageHelper
使用插件来简化上述代码,Controller层的代码不需要修改!
<!--PageHelper分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.2</version>
</dependency>
//Mapper层实现的Demo
@Select("select * from emp")
public List<Emp> list();
//Service实现类中的Demo
@Override
public PageBean page(Integer page, Integer pageSize) {
//1. 设置分页参数
PageHelper.startPage(page,pageSize);
//2. 执行查询
List<Emp> empList = empMapper.list();
Page<Emp> p = (Page<Emp>) empList;
//3. 封装PageBean对象
PageBean pageBean = new PageBean(p.getTotal(), p.getResult());
return pageBean;
}
分页查询--条件查询版
Controller层:
Service层:
Mapper层:
动态SQL需要配置XML文件,需要在Resource文件下创建同包名的文件,但是注意这里需要使用'/'分割,而不是'.'分割。
如果有报错的话可以尝试在Mapper类中对应的函数形参前面添加上@Param注解来进行字段映射!
<?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.itheima.mapper.EmpMapper">
<!--动态SQL语句进行条件查询 id要跟Mapper文件函数名对应,resultType为单个数据的类型这里也就是员工实体类-->
<select id="list" resultType="com.itheima.pojo.Emp">
select *
from emp
<where><!--where标签会自动处理and关系-->
<!--name不为null或者不为空字符串的时候才添加该条件-->
<if test="name != null and name != ''">
name like concat('%',#{name},'%')
</if>
<if test="gender != null">
and gender = #{gender}
</if>
<if test="begin != null and end != null">
and entrydate between #{begin} and #{end}
</if>
</where>
order by update_time desc
</select>
</mapper>