Javaweb之SpringBootWeb案例员工管理分页查询(带条件)的详细解析

发布时间:2024年01月19日

3.2 分页查询(带条件)

完了分页查询后,下面我们需要在分页查询的基础上,添加条件。

3.2.1 需求

通过员工管理的页面原型我们可以看到,员工列表页面的查询,不仅仅需要考虑分页,还需要考虑查询条件。 分页查询我们已经实现了,接下来,我们需要考虑在分页查询的基础上,再加上查询条件。

我们看到页面原型及需求中描述,搜索栏的搜索条件有三个,分别是:

  • 姓名:模糊匹配

  • 性别:精确匹配

  • 入职日期:范围匹配

select * 
from emp
where 
  name like concat('%','张','%') ? -- 条件1:根据姓名模糊匹配
 ?and gender = 1 ? ? ? ? ? ? ? ? ? -- 条件2:根据性别精确匹配
 ?and entrydate = between '2000-01-01' and '2010-01-01' ?-- 条件3:根据入职日期范围匹配
order by update_time desc;

而且上述的三个条件,都是可以传递,也可以不传递的,也就是动态的。 我们需要使用前面学习的Mybatis中的动态SQL 。

3.2.2 思路分析

3.2.3 功能开发

通过查看接口文档:员工列表查询

请求路径:/emps

请求方式:GET

请求参数:

参数名称是否必须示例备注
name姓名
gender1性别 , 1 男 , 2 女
begin2010-01-01范围匹配的开始时间(入职日期)
end2020-01-01范围匹配的结束时间(入职日期)
page1分页查询的页码,如果未指定,默认为1
pageSize10分页查询的每页记录数,如果未指定,默认为10

在原有分页查询的代码基础上进行改造:

EmpController

@Slf4j
@RestController
@RequestMapping("/emps")
public class EmpController {
?
 ? ?@Autowired
 ? ?private EmpService empService;
?
 ? ?//条件分页查询
 ? ?@GetMapping
 ? ?public Result page(@RequestParam(defaultValue = "1") Integer page,
 ? ? ? ? ? ? ? ? ? ? ? @RequestParam(defaultValue = "10") Integer pageSize,
 ? ? ? ? ? ? ? ? ? ? ? String name, Short gender,
 ? ? ? ? ? ? ? ? ? ? ? @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
 ? ? ? ? ? ? ? ? ? ? ? @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end) {
 ? ? ? ?//记录日志
 ? ? ? ?log.info("分页查询,参数:{},{},{},{},{},{}", page, pageSize,name, gender, begin, end);
 ? ? ? ?//调用业务层分页查询功能
 ? ? ? ?PageBean pageBean = empService.page(page, pageSize, name, gender, begin, end);
 ? ? ? ?//响应
 ? ? ? ?return Result.success(pageBean);
 ?  }
}

EmpService

public interface EmpService {
 ? ?/**
 ? ? * 条件分页查询
 ? ? * @param page ? ? 页码
 ? ? * @param pageSize 每页展示记录数
 ? ? * @param name ? ? 姓名
 ? ? * @param gender ? 性别
 ? ? * @param begin ? 开始时间
 ? ? * @param end ? ? 结束时间
 ? ? * @return
 ? ? */
 ? ?PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end);
}

EmpServiceImpl

@Slf4j
@Service
public class EmpServiceImpl implements EmpService {
 ? ?@Autowired
 ? ?private EmpMapper empMapper;
?
 ? ?@Override
 ? ?public PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end) {
 ? ? ? ?//设置分页参数
 ? ? ? ?PageHelper.startPage(page, pageSize);
 ? ? ? ?//执行条件分页查询
 ? ? ? ?List<Emp> empList = empMapper.list(name, gender, begin, end);
 ? ? ? ?//获取查询结果
 ? ? ? ?Page<Emp> p = (Page<Emp>) empList;
 ? ? ? ?//封装PageBean
 ? ? ? ?PageBean pageBean = new PageBean(p.getTotal(), p.getResult());
 ? ? ? ?return pageBean;
 ?  }
}

EmpMapper

@Mapper
public interface EmpMapper {
 ? ?//获取当前页的结果列表
 ? ?public List<Emp> list(String name, Short gender, LocalDate begin, LocalDate end);
}

EmpMapper.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="com.itheima.mapper.EmpMapper">
?
 ? ?<!-- 条件分页查询 -->
 ? ?<select id="list" resultType="com.itheima.pojo.Emp">
 ? ? ?  select * from emp
 ? ? ? ?<where>
 ? ? ? ? ? ?<if test="name != null and name != ''">
 ? ? ? ? ? ? ?  name like concat('%',#{name},'%')
 ? ? ? ? ? ?</if>
 ? ? ? ? ? ?<if test="gender != null">
 ? ? ? ? ? ? ?  and gender = #{gender}
 ? ? ? ? ? ?</if>
 ? ? ? ? ? ?<if test="begin != null and end != null">
 ? ? ? ? ? ? ?  and entrydate between #{begin} and #{end}
 ? ? ? ? ? ?</if>
 ? ? ? ?</where>
 ? ? ?  order by update_time desc
 ? ?</select>
</mapper>

3.2.4 功能测试

功能开发完成后,重启项目工程,打开postman,发起GET请求:

控制台SQL语句:

3.2.5 前后端联调

打开浏览器,测试后端功能接口:

文章来源:https://blog.csdn.net/qq_69748833/article/details/135686745
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。