菜鸟之路Day37一一Web开发综合案例(员工管理)
作者:blue
时间:2025.5.30
文章内容学习自黑马程序员BV1m84y1w7Tb
1.员工列表查询
前端传递给后端的参数:
当前页码:page
每页展示记录数:pageSize
后端给前端返回的数据:
数据列表:List
select * from emp limit ?,?;
AI 代码解读
总记录数:total
select count(*) from emp;
AI 代码解读
由于后端要返回两个参数,所以我们在这里对实体类做一个包装
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageBean {
private Long total;
private List rows;
}
AI 代码解读
EmpController
@Slf4j
@RestController
public class EmpController {
@Autowired
EmpService empService;
@GetMapping("/emps")
public Result page(@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer pageSize)
{
log.info("分页查询,页码{},条目数{}",page,pageSize);
PageBean pageBean = empService.page(page,pageSize);
return Result.success(pageBean);
}
}
AI 代码解读
EmpServiceImpl
@Service
public class EmpServiceImpl implements EmpService {
@Autowired
private EmpMapper empMapper;
/*
* 进行分页查询
* */
@Override
public PageBean page(Integer page, Integer pageSize) {
//查询总数
Long total = empMapper.count();
//分页查询
Integer start = (page - 1) * pageSize;
List<Emp> list = empMapper.page(start, pageSize);
return new PageBean(total, list);
}
}
AI 代码解读
EmpMapper
@Mapper
public interface EmpMapper {
/*
* 查询员工信息记录数
* */
@Select("select count(*) from emp")
Long count();
/*
* 分页查询
* */
@Select("Select * from emp limit #{start},#{pageSize}")
List<Emp> page(Integer start, Integer pageSize);
}
AI 代码解读
以上就是分页查询的基础代码,但其中需要用到两条SQL语句,这个分页查询的业务功能比较常见,代码也比较固定,所以我们可以使用PageHelper这个插件来简化代码。
引入PageHelper依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.6</version>
</dependency>
AI 代码解读
EmpMapper
/*
* 查询全部员工
* */
@Select("select * from emp")
List<Emp> list();
AI 代码解读
EmpServiceImpl
@Override
public PageBean page(Integer page, Integer pageSize) {
//1.设置分页参数
PageHelper.startPage(page, pageSize);
//2.执行查询
List<Emp> empList = empMapper.list();
Page<Emp> p = (Page<Emp>) empList;
//封装PageBean对象
return new PageBean(p.getTotal(), p.getResult());
}
AI 代码解读
2.条件分页查询
接口文档中要求我们是可以支持条件分页查询的,所以这部分我们来实现这个功能
首先是Controller层,我们需要将前端传递过来的数据都接收一下
@GetMapping("/emps")
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);
}
AI 代码解读
然后是Service层,同样进行修改
@Override
public PageBean page(Integer page, Integer pageSize, String name, Short gender,
LocalDate begin, LocalDate end) {
//1.设置分页参数
PageHelper.startPage(page, pageSize);
//2.执行查询
List<Emp> empList = empMapper.list(name,gender,begin,end);
Page<Emp> p = (Page<Emp>) empList;
//封装PageBean对象
return new PageBean(p.getTotal(), p.getResult());
}
AI 代码解读
然后是Mapper层,条件查询需要动态SQL,所以我们在这里使用XML映射
List<Emp> list(String name, Short gender, LocalDate begin, LocalDate end);
AI 代码解读
<?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.bluening.talis_web_demo.mapper.EmpMapper">
<select id="list" resultType="com.bluening.talis_web_demo.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 entry_date between #{begin} and #{end}
</if>
</where>
order by update_time desc
</select>
</mapper>
AI 代码解读
3.删除员工
EmpController
@DeleteMapping("/emps/{ids}")
public Result delete(@PathVariable("ids") List<Integer> ids) {
log.info("删除员工{}",ids);
empService.delete(ids);
return Result.success();
}
AI 代码解读
EmpService
@Override
public void delete(List<Integer> ids) {
empMapper.delete(ids);
}
AI 代码解读
EmpMapper
void delete(List<Integer> ids);
AI 代码解读
XML映射
<!--删除员工-->
<delete id="delete">
delete from emp where id in
<foreach collection="ids" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</delete>
AI 代码解读
4.新增员工
EmpController
@PostMapping("/emps")
public Result save(@RequestBody Emp emp) {
log.info("新增员工");
empService.save(emp);
return Result.success();
}
AI 代码解读
EmpService
@Override
public void save(Emp emp) {
emp.setCreateTime(LocalDateTime.now());
emp.setUpdateTime(LocalDateTime.now());
empMapper.insert(emp);
}
AI 代码解读
EmpMapper
@Insert("insert into emp(username,name,gender,image,job,entry_date,dept_id,create_time,update_time)" +
"values (#{username},#{name},#{gender},#{image},#{job},#{entryDate},#{deptId},#{createTime},#{updateTime})")
void insert(Emp emp);
AI 代码解读