一、【分页查询】员工列表分页展示

✅三层职责拆解
层级 主要逻辑
Controller 接收分页参数(page、pageSize),返回封装结果
Service 调用分页工具 PageHelper,返回 PageResult
Mapper 编写分页 SQL + count SQL

✅需求分析

请求路径:/emp

请求方式:get

请求参数:application/json


✅ Controller 接收参数(设置默认值)
public Result list(@RequestParam(defaultValue = "1") Integer page,
                   @RequestParam(defaultValue = "10") Integer pageSize) { ... }


二、PageHelper 简化开发

概念:PageHelper是第三方提供的在Mybatis框架中用来实现分页的插件,用来简化分页操作,提高开发效率。


✅ 步骤
  1. Maven 引入 PageHelper 依赖
  2. 定义Mapper接口的查询方法(无需考虑分页)
  3. 在 Service 层配置分页逻辑:
PageHelper.startPage(page, pageSize);
Page<Emp> pageData = (Page<Emp>) empMapper.selectByCondition(...);

📌注意

  • 只能作用于紧随其后的第一条 SQL
  • SQL 末尾不加分号 ;


三、条件分页查询

✅需求分析


✅【参数接收优化】对象封装 vs queryString
方法 特点说明
多个参数 可用 queryString,使用 @RequestParam 一一接收
参数多时 推荐封装为对象,如 EmpQueryDTO,提高可维护性

📌日期时间类型参数接收时,需要通过 @DateTimeFormat 注解指定前端传递的日期格式

📌使用 concat 方法来拼接字符串


四、动态SQL

随着用户的输入或外部条件的变化而变化的SQL语句,我们称为动态SQL

✅ 场景:用户输入的查询条件不固定
<select id="list" resultType="Emp">
  SELECT * FROM emp
  <where>
    <if test="name != null and name != ''">
      AND name LIKE CONCAT('%', #{name}, '%')
    </if>
    <if test="gender != null">
      AND gender = #{gender}
    </if>
    <if test="begin != null and end != null">
      AND entry_date BETWEEN #{begin} AND #{end}
    </if>
  </where>
</select>
标签 作用
<if> 条件判断,如果条件成立,则拼接对应的sql片段
<where> 据查询条件,来生成where关键字,并会自动去除条件前面多余的andor


✅ 总结

模块 核心内容
多表设计 一对多/多对多关系建表设计、逻辑外键优先
多表查询 掌握内连接、左连接、子查询的写法与使用场景
分页查询 手动分页 vs PageHelper 插件简化分页操作
条件接收 结合 @RequestParam、@DateTimeFormat 灵活绑定
参数优化 参数封装对象 + 自动映射提升代码整洁性
动态 SQL MyBatis 使用 <if> + <where> 实现条件拼接,灵活高效
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐