欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 培训 > 【无标题】

【无标题】

2025/2/21 3:16:08 来源:https://blog.csdn.net/weixin_74799820/article/details/145692290  浏览:    关键词:【无标题】

Day17

Tlias智能学习系统

员工管理:

条件分页查询:

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

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

具体实现:

/*** 分页查询*/@GetMappingpublic 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对象,返回。

具体实现:(基本不动)

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:

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

具体实现:

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

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

<!--定义Mapper映射文件的约束和基本结构-->
<!DOCTYPE mapperPUBLIC "-//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.idwhere 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方法的参数较多,且未来可能继续增加,这会使得方法签名变得复杂难以维护,此时可以考虑将多个请求参数封装为一个对象。

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。

<!--定义Mapper映射文件的约束和基本结构-->
<!DOCTYPE mapperPUBLIC "-//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.idwhere<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>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词