分页查询标准流程

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 categoryName
    FROM dish d
    LEFT 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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值