黑马JavaWeb+AI笔记 Day08 Web后端实战(员工管理-查询员工)
模块核心内容多表设计一对多/多对多关系建表设计、逻辑外键优先多表查询掌握内连接、左连接、子查询的写法与使用场景分页查询手动分页 vs PageHelper 插件简化分页操作条件接收结合 @RequestParam、@DateTimeFormat 灵活绑定参数优化参数封装对象 + 自动映射提升代码整洁性动态 SQLMyBatis 使用<if><where>实现条件拼接,灵活高效。
·
一、【分页查询】员工列表分页展示
✅三层职责拆解
层级 | 主要逻辑 |
---|---|
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框架中用来实现分页的插件,用来简化分页操作,提高开发效率。
✅ 步骤
- Maven 引入 PageHelper 依赖
- 定义Mapper接口的查询方法(无需考虑分页)
- 在 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关键字,并会自动去除条件前面多余的and或or。 |
✅ 总结
模块 | 核心内容 |
---|---|
多表设计 | 一对多/多对多关系建表设计、逻辑外键优先 |
多表查询 | 掌握内连接、左连接、子查询的写法与使用场景 |
分页查询 | 手动分页 vs PageHelper 插件简化分页操作 |
条件接收 | 结合 @RequestParam、@DateTimeFormat 灵活绑定 |
参数优化 | 参数封装对象 + 自动映射提升代码整洁性 |
动态 SQL | MyBatis 使用 <if> + <where> 实现条件拼接,灵活高效 |
更多推荐
所有评论(0)