找回密码
 立即注册
查看: 17|回复: 0

JavaWeb(SpringBoot3+vue3)开发+教学管理系统项目实战之批量删除员工

[复制链接]

73

主题

3

精华

77

金币

技术维护QQ:515138

积分
165
发表于 5 天前 | 显示全部楼层 |阅读模式
JavaWeb(SpringBoot3+vue3)开发+教学管理系统项目实战之批量删除员工
C层:
  1. package com.zidiu.controller;
  2. import com.zidiu.pojo.Emp;
  3. import com.zidiu.pojo.EmpQueryParam;
  4. import com.zidiu.pojo.PageResult;
  5. import com.zidiu.pojo.Result;
  6. import com.zidiu.service.EmpService;
  7. import lombok.extern.slf4j.Slf4j;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.format.annotation.DateTimeFormat;
  10. import org.springframework.web.bind.annotation.*;
  11. import java.time.LocalDate;
  12. import java.util.Arrays;
  13. import java.util.List;
  14. @RequestMapping("/emps")
  15. @Slf4j
  16. @RestController
  17. public class EmpController {
  18.     @Autowired
  19.     private EmpService empService;
  20.     /**
  21.      * 查询员工列表带分页
  22.      */
  23.     @GetMapping
  24.     public Result page(EmpQueryParam empQueryParam) {
  25.         log.info("查询请求参数: {}", empQueryParam);
  26.         PageResult pageResult = empService.page(empQueryParam);
  27.         return Result.success(pageResult);
  28.     }
  29.     /**
  30.      * 添加员工
  31.      */
  32.     @PostMapping
  33.     public Result save(@RequestBody Emp emp){
  34.         log.info("请求参数emp: {}", emp);
  35.         empService.save(emp);
  36.         return Result.success();
  37.     }
  38.     /**
  39.      * 批量删除员工
  40.      * 在Controller方法中通过数组来接收
  41.      */
  42. //    @DeleteMapping
  43. //    public Result delete(Integer[] ids){
  44. //        log.info("批量删除部门: ids={} ", Arrays.asList(ids));
  45. //        return Result.success();
  46. //    }
  47.     /**
  48.      * 批量删除员工
  49.      * 在Controller方法中通过集合来接收,推荐
  50.      */
  51.     @DeleteMapping
  52.     public Result delete(@RequestParam List<Integer> ids){
  53.         log.info("批量删除部门: ids={} ", ids);
  54.         empService.deleteByIds(ids);
  55.         return Result.success();
  56.     }
  57. }
复制代码
也可以将其封装到一个List<Integer> 集合中,如果要将其封装到一个集合中,需要在集合前面加上 @RequestParam 注解。

S层:
  1. package com.zidiu.service;
  2. import com.zidiu.pojo.Emp;
  3. import com.zidiu.pojo.EmpQueryParam;
  4. import com.zidiu.pojo.PageResult;
  5. import java.time.LocalDate;
  6. import java.util.List;
  7. public interface EmpService {
  8.       /**
  9.      * 分页查询
  10.      */
  11.     PageResult<Emp> page(EmpQueryParam empQueryParam);
  12.     /**
  13.      * 添加员工
  14.      * @param emp
  15.      */
  16.     void save(Emp emp);
  17.     /**
  18.      * 批量删除员工
  19.      */
  20.     void deleteByIds(List<Integer> ids);
  21. }
复制代码
实现层:
  1. package com.zidiu.service.impl;
  2. import com.github.pagehelper.Page;
  3. import com.github.pagehelper.PageHelper;
  4. import com.zidiu.mapper.EmpExprMapper;
  5. import com.zidiu.mapper.EmpMapper;
  6. import com.zidiu.pojo.Emp;
  7. import com.zidiu.pojo.EmpExpr;
  8. import com.zidiu.pojo.EmpQueryParam;
  9. import com.zidiu.pojo.PageResult;
  10. import com.zidiu.service.EmpService;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.stereotype.Service;
  13. import org.springframework.transaction.annotation.Transactional;
  14. import org.springframework.util.CollectionUtils;
  15. import java.time.LocalDate;
  16. import java.time.LocalDateTime;
  17. import java.util.List;
  18. @Service
  19. public class EmpServiceImpl implements EmpService {
  20.     @Autowired
  21.     private EmpMapper empMapper;
  22.     @Autowired
  23.     private EmpExprMapper empExprMapper;
  24.     /**
  25.      * 查询员工列表
  26.      */
  27.     @Override
  28.     public PageResult page(EmpQueryParam empQueryParam) {
  29.         //1. 设置PageHelper分页参数
  30.         PageHelper.startPage(empQueryParam.getPage(), empQueryParam.getPageSize());
  31.         //2. 执行查询
  32.         List<Emp> empList = empMapper.list(empQueryParam);
  33.         //3. 封装分页结果
  34.         Page<Emp> p = (Page<Emp>)empList;
  35.         return new PageResult(p.getTotal(), p.getResult());
  36.     }
  37.     /**
  38.      * 添加员工
  39.      * @param emp
  40.      */
  41.     @Transactional
  42.     @Override
  43.     public void save(Emp emp) {
  44.         //1.补全基础属性
  45.         emp.setCreateTime(LocalDateTime.now());
  46.         emp.setUpdateTime(LocalDateTime.now());
  47.         //2.保存员工基本信息
  48.         empMapper.insert(emp);
  49.         int i = 1/0;
  50.         //3. 保存员工的工作经历信息 - 批量
  51.         Integer empId = emp.getId();
  52.         List<EmpExpr> exprList = emp.getExprList();
  53.         if(!CollectionUtils.isEmpty(exprList)){
  54.             exprList.forEach(empExpr -> empExpr.setEmpId(empId));
  55.             empExprMapper.insertBatch(exprList);
  56.         }
  57.     }
  58.     /**
  59.      * 批量删除员工
  60.      */
  61.     @Transactional(rollbackFor = {Exception.class})
  62.     @Override
  63.     public void deleteByIds(List<Integer> ids) {
  64.         //1. 根据ID批量删除员工基本信息
  65.         empMapper.deleteByIds(ids);
  66.         //2. 根据员工的ID批量删除员工的工作经历信息
  67.         empExprMapper.deleteByEmpIds(ids);
  68.     }
  69. }
复制代码
由于删除员工信息,既要删除员工基本信息,又要删除工作经历信息,操作多次数据库的删除,所以需要进行事务控制。
M层:
  1. package com.zidiu.mapper;
  2. import com.zidiu.pojo.Emp;
  3. import com.zidiu.pojo.EmpQueryParam;
  4. import org.apache.ibatis.annotations.Insert;
  5. import org.apache.ibatis.annotations.Mapper;
  6. import org.apache.ibatis.annotations.Options;
  7. import org.apache.ibatis.annotations.Select;
  8. import java.time.LocalDate;
  9. import java.util.List;
  10. @Mapper
  11. public interface EmpMapper {
  12.     /**
  13.      * 查询所有的员工及其对应的部门名称
  14.      */
  15.     List<Emp> list(EmpQueryParam empQueryParam);
  16.     /**
  17.      * 新增员工数据
  18.      */
  19.     @Options(useGeneratedKeys = true, keyProperty = "id")
  20.     @Insert("insert into emp(username, name, gender, phone, job, salary, image, entry_date, dept_id, create_time, update_time) " +
  21.             "values (#{username},#{name},#{gender},#{phone},#{job},#{salary},#{image},#{entryDate},#{deptId},#{createTime},#{updateTime})")
  22.     void insert(Emp emp);
  23.     /**
  24.      * 批量删除员工
  25.      */
  26.     void deleteByIds(List<Integer> ids);
  27. }
复制代码
  1. package com.zidiu.mapper;
  2. import com.zidiu.pojo.EmpExpr;
  3. import org.apache.ibatis.annotations.Mapper;
  4. import java.util.List;
  5. @Mapper
  6. public interface EmpExprMapper {
  7.     /**
  8.      * 批量插入员工工作经历信息
  9.      */
  10.     void insertBatch(List<EmpExpr> exprList);
  11.     /**
  12.      * 根据员工ID批量删除员工工作经历信息
  13.      */
  14.     void deleteByEmpIds(List<Integer> empIds);
  15. }
复制代码
XML层:
  1. <!--定义Mapper映射文件的约束和基本结构-->
  2. <!DOCTYPE mapper
  3.         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4.         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.zidiu.mapper.EmpExprMapper">
  6.     <insert id="insertBatch">
  7.         insert into emp_expr (emp_id, begin, end, company, job) values
  8.         <foreach collection="exprList" item="expr" separator=",">
  9.             (#{expr.empId}, #{expr.begin}, #{expr.end}, #{expr.company}, #{expr.job})
  10.         </foreach>
  11.     </insert>
  12.     <!--根据员工的ID批量删除工作经历信息-->
  13.     <delete id="deleteByEmpIds">
  14.         delete from emp_expr where emp_id in
  15.         <foreach collection="empIds" item="empId" open="(" close=")" separator=",">
  16.             #{empId}
  17.         </foreach>
  18.     </delete>
  19.     <select id="list" resultType="com.zidiu.pojo.Emp">
  20.         select e.*, d.name deptName from emp as e left join dept as d on e.dept_id = d.id
  21.         <where>
  22.             <if test="name != null and name != ''">
  23.                 e.name like concat('%',#{name},'%')
  24.             </if>
  25.             <if test="gender != null">
  26.                 and e.gender = #{gender}
  27.             </if>
  28.             <if test="begin != null and end != null">
  29.                 and e.entry_date between #{begin} and #{end}
  30.             </if>
  31.         </where>
  32.     </select>
  33. </mapper>
复制代码
  1. <!--定义Mapper映射文件的约束和基本结构-->
  2. <!DOCTYPE mapper
  3.         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4.         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.zidiu.mapper.EmpMapper">
  6.     <!--批量删除员工信息-->
  7.     <delete id="deleteByIds">
  8.         delete from emp where id in
  9.         <foreach collection="ids" item="id" open="(" close=")" separator=",">
  10.             #{id}
  11.         </foreach>
  12.     </delete>
  13.     <select id="list" resultType="com.zidiu.pojo.Emp">
  14.         select e.*, d.name deptName from emp as e left join dept as d on e.dept_id = d.id order by e.id desc
  15.         <where>
  16.             <if test="name != null and name != ''">
  17.                 e.name like concat('%',#{name},'%')
  18.             </if>
  19.             <if test="gender != null">
  20.                 and e.gender = #{gender}
  21.             </if>
  22.             <if test="begin != null and end != null">
  23.                 and e.entry_date between #{begin} and #{end}
  24.             </if>
  25.         </where>
  26.     </select>
  27. </mapper>
复制代码
这里用到Mybatis中的动态SQL里提供的 <foreach> 标签,改标签的作用,是用来遍历循环,常见的属性说明:
  • collection:集合名称
  • item:集合遍历出来的元素/项
  • separator:每一次遍历使用的分隔符
  • open:遍历开始前拼接的片段
  • close:遍历结束后拼接的片段
上述的属性,是可选的,并不是所有的都是必须的。 可以自己根据实际需求,来指定对应的属性。
SpringBoot3+Vue3开发综合实战项目:
JavaWeb(SpringBoot3+vue3)开发+教学管理系统项目实战
网站建设,公众号小程序开发,系统定制,软件App开发,技术维护【联系我们】手机/微信:17817817816 QQ:515138

QQ|Archiver|自丢网 ( 粤ICP备2024252464号-1 )

GMT+8, 2025-12-1 06:28

专注于网站建设,公众号小程序制作,商城小程序,系统定制,软件App开发

【联系我们】手机/微信:17817817816 QQ:515138

快速回复 返回顶部 返回列表