分页查询标准流程
1.分页结果只涉及一张表
Controller层
返回值类型PageResult,取名pageQuery,参数DTO,调用Service的方法,直接把整个DTO传进去,用PageResult来接受,最后用Result包装一下直接返回
示例代码
@GetMapping("/page")
public Result<PageResult> pageQuery(EmployeePageQueryDTO employeePageQueryDTO)
{PageResult pageresult= employeeService.pageQuery(employeePageQueryDTO);return Result.success(pageresult);
}
Service层
第一步是用PageHelper吧页码和每一页的数量交给PageHelper来处理
第二步是直接调用Mapper层,将除了页码和每一页的数量的其他参数传递到mapper层用于筛选数据,注意这里我们用Page对象来接受,page对象里面会自动包含total和list集合
第三步是直接把这两个数据取出来封装到PageResult对象里面返回给Controller层
@Override
public PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO) {//这里就帮我们处理好了分页的逻辑PageHelper.startPage(employeePageQueryDTO.getPage(),employeePageQueryDTO.getPageSize());//然后我们要做的就是根据名字模糊查询,我们再次使用PageHelper提供的方法,用Page对象来接受查询的接口//Page对象里面就会自动包含所有分页的信息,包括分页的数据和总数Page<Employee> page=employeeMapper.pageQuery(employeePageQueryDTO.getName());//现在我们把两个数据拿出来total和List封装到PageResult对象中,然后返回return new PageResult(page.getTotal(),page.getResult());}
Mapper层
由于分页查询我们要检测传入的其他参数是否为空,我们就直接用xml文件来写
Xml文件的格式是
<?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=“.……….”><………. id="………." resultType="………."></……….></mapper>
对于分页查询我们有如下的示例代码:
<select id="pageQuery" resultType="Employee">select * from employee//从这个表里面选择所有属性<where>//用where标签来进行筛选<if test="name != null and name != ‘’”>//要先判断一下是否为null和空,比如加载页面的是否就是空值and name like concat('%',#{name},’%’)//这里是是筛选条件,名字里要包含这个字段</if></where>Order by create_time desc//时间降序排序
</select>
2.分页结果涉及多张表
我们需要在多表查询将其他的表中的元素加入到我们要返回的vo中
service的page的接受类型就不能用单一的entity实体类了,要用包装好的vo类型
例如
service层就要Page<DishVO> page=dishMapper.pageQuery(dishPageQueryDTO.getName(),dishPageQueryDTO.getCategoryId(),dishPageQueryDTO.getStatus());
返回vo类型的page
然后的话我们在xml文件里面写的也要注意返回类型要改成vo,还要连接多变,而且很重要的是要给其他的表的内容取别名与vo里面的字段匹配
如
并且 resultType="com.sky.vo.DishVO”改成VO
其他把其他表里面的名称的别名取成vo里面的字段c.name AS categoryName
<select id="pageQuery" resultType="com.sky.vo.DishVO">SELECT d.*, c.name AS categoryNameFROM dish dLEFT JOIN category c ON d.category_id = c.id<where><if test="name != null and name != ''">AND d.name LIKE CONCAT('%', #{name}, '%')</if><if test="categoryId != null">AND d.category_id = #{categoryId}</if><if test="status != null">AND d.status = #{status}</if></where>ORDER BY d.create_time DESC
</select>