当前位置: 首页 > news >正文

分页查询标准流程

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>


http://www.mrgr.cn/news/27515.html

相关文章:

  • 使用Fabric来实现远程服务器管理与自动化
  • SpringCloud 微服务消息队列灰度方案 (RocketMQ 4.x)
  • git使用及上线流程(仅为我工作中常用)
  • 【数据结构 | C++】整型关键字的平方探测法散列
  • JWT 过期后 自动刷新方案
  • iOS swift开发--- 加载PDF文件并显示内容
  • 本地不能訪問linux的kafka服務
  • 【物联网】一篇文章带你认识RFID(射频识别技术)
  • 【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】004 - Kernel 启动引导代码head.S 源码逐行分析
  • 白手套公司
  • supermap Iclient3d for cesium加载地形并夸大地形
  • SpringCloudAlibaba:Seata
  • 《C++代码高度优化之双刃剑:避免过度优化引发的“暗雷”》
  • 基于SSM的银发在线教育云平台的设计与实现
  • SpringCloud的学习,Consul服务注册与发现、分布式配置,以及 服务调用和负载均衡
  • JavaDS —— B树
  • 【测试报告】博客系统
  • 24年9月通信基础知识补充2
  • S32K3 工具篇7:如何使用VScode编译EB MCAL工程
  • 超链接/表格/表单的复习(课后作业)
  • 进程vs线程:高效并发编程的基石
  • [Python学习日记-22] Python 中的字符编码(下)
  • python数据分析知识点大全
  • mysql笔记9(子查询)
  • 【C++11】智能指针
  • vue3 透传 Attributes