【无标题】

Day17

Tlias智能学习系统

员工管理:

条件分页查询:

三层架构中,每一层的职责如下:

1.Controller:接收参数(分页、条件);调用service,进行分页查询,获取PageResult;响应结果。

具体实现:

java 复制代码
/**
     * 分页查询
     */
    @GetMapping
    public Result page (@RequestParam(defaultValue = "1") Integer page,
                        @RequestParam(defaultValue = "10") Integer pageSize,
                        String name, Integer gender,
                        @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
                        @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end){
        log.info("分页查询:{},{},{},{},{},{}",page,pageSize,name,gender,begin,end);
        PageResult<Emp> pageResult = empService.page(page,pageSize,name,gender,begin,end);
        return Result.success(pageResult);
    }

2.Service:使用PageHelper完成分页条件查询;封装PageResult对象,返回。

具体实现:(基本不动)

java 复制代码
public PageResult<Emp> page(Integer page, Integer pageSize, String name, Integer gender, LocalDate begin,LocalDate end) {
        //1.设置分页参数(PageHelper)
        PageHelper.startPage(page,pageSize);
​
        //2.执行查询
        List<Emp> empList = empMapper.list(name,gender,begin,end);
​
        //3.解析查询结果,并封装
        Page<Emp> p = (Page<Emp>) empList;
        return new PageResult<Emp>(p.getTotal(),p.getResult());
​
    }

3.Mapper:SQL:

sql 复制代码
select e.*,d.name deptName from emp e left join dept d on e.dept_id = d.id
                           where e.name like '%阮%' and e.gender = 1 and e.entry_date between '2010-0101' and '2020-01-01'
                           order by e.update_time desc;

具体实现:

java 复制代码
@Mapper
public interface EmpMapper {
 public List<Emp> list(String name, Integer gender, LocalDate begin, LocalDate end);
}

由于查询语句复杂所以用配置文件:

XML 复制代码
<!--定义Mapper映射文件的约束和基本结构-->
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.mapper.EmpMapper">
    <select id="list" resultType="com.itheima.pojo.Emp">
        select e.*, d.name deptName from emp as e left join dept as d on e.dept_id = d.id
        where e.name like concat('%',#{name},'%')
          and e.gender = #{gender}
          and e.entry_date between #{begin} and #{end}
        order by e.update_time desc
    </select>
</mapper>

请求参数接收优化方案:

如果controller方法的参数较多,且未来可能继续增加,这会使得方法签名变得复杂难以维护,此时可以考虑将多个请求参数封装为一个对象。

java 复制代码
package com.itheima.pojo;
​
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
​
import java.time.LocalDate;
@Data
public class EmpQueryParam {
    private Integer page = 1;//页码
    private Integer pageSize = 10;//每页展示记录数
    private String name;//姓名
    private Integer gender;//性别
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate begin;//入职时间-开始
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate end;//入职时间-结束
}

动态SQL:

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

<if>:判断条件是否成立,如果条件为true,则拼接SQL。

<where>:根据查询条件,来生成where关键字,并会自动去除条件前面多余的and或or。

XML 复制代码
<!--定义Mapper映射文件的约束和基本结构-->
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.mapper.EmpMapper">
    <select id="list" resultType="com.itheima.pojo.Emp">
        select e.*, d.name deptName from emp as e left join dept as d on e.dept_id = d.id
        where
            <if test="name!=null and name!=''">
            e.name like concat('%',#{name},'%')
          </if>
            <if test="gender!=null">
          and e.gender = #{gender}
          </if>
            <if test="begin!=null and end!=null">
          and e.entry_date between #{begin} and #{end}
            </if>
        order by e.update_time desc
    </select>
</mapper>
相关推荐
考虑考虑27 分钟前
JDK26中的Map.ofLazy
java·后端·java ee
鶴哥只手遮天4 小时前
Spring AI 2.0.1 深度解析-第 14 章 MCP 服务端(上):注解式实现与工具来源
java·人工智能·开源
鶴哥只手遮天4 小时前
Spring AI 2.0.1 深度解析-第 15 章 MCP 服务端(下):三种协议形态、Streamable 传输与状态管理
java·人工智能·开源
鶴哥只手遮天4 小时前
Spring AI 2.0.1 深度解析-第 16 章 向量存储(上):`VectorStore` 接口体系、`BatchingStrategy`
java·人工智能·开源
鶴哥只手遮天4 小时前
Spring AI 2.0.1 深度解析-第 12 章 工具循环的流式形态、Usage 累加与扩展体系
java·人工智能·开源
鶴哥只手遮天4 小时前
Spring AI 2.0.1 深度解析-第 23 章 模型供应商实现:从 `OpenAiSetup` 到 Bedrock
java·人工智能·开源
鶴哥只手遮天4 小时前
Spring AI 2.0.1 深度解析-第 06 章 内置 Advisor 全景:13 个实现逐个剖到源码级
java·人工智能·开源
鶴哥只手遮天4 小时前
Spring AI 2.0.1 深度解析-第 03 章 消息体系与 Prompt:不可变模型、`ChatOptions` 与模板渲染
java·人工智能·开源
鶴哥只手遮天4 小时前
Spring AI 2.0.1 深度解析-第 24 章 生产实践与 2.x 迁移:陷阱清单、AOT 与调优
java·人工智能·开源
鶴哥只手遮天4 小时前
Spring AI 2.0.1 深度解析-第 10 章 工具调用(中):执行链路、结果转换与工具限制
java·人工智能·开源