spingboot实现批量删除和修改接口

Controller

    /**
     * 批量删除员工
     */
    @Operation(summary = "根据ID批量删除员工")
    @DeleteMapping("/{ids}")
    public Result delete(@PathVariable List<Integer> ids) {
        log.info("批量删除员工,IDs:{}", ids);
        empService.deleteByIds(ids);
        return Result.success();
    }

    /**
     * 修改员工
     */
    @Operation(summary = "修改员工")
    @PutMapping
    public Result update(@RequestBody Emp emp) {
        log.info("修改员工:{}", emp);
        empService.update(emp);
        return Result.success();
    }
}

sverver

 /**
     * 批量删除员工(同时删除员工的工作经历)
     * @param ids 员工ID列表
     */
    @Transactional(rollbackFor = Exception.class) //事务:出现异常回滚
    @Override
    public void deleteByIds(List<Integer> ids) {
        if (ids == null || ids.isEmpty()) {
            return;
        }
        //1. 批量删除员工的工作经历信息
        empExprMapper.deleteByEmpIds(ids);
        //2. 批量删除员工基本信息
        empMapper.deleteByIds(ids);
    }

    /**
     * 修改员工(同时更新员工的工作经历)
     * @param emp
     */
    @Transactional(rollbackFor = Exception.class) //事务:出现异常回滚
    @Override
    public void update(Emp emp) {
        //1. 补全修改时间
        emp.setUpdateTime(LocalDateTime.now());
        //2. 更新员工基本信息
        empMapper.updateById(emp);
        //3. 先删除该员工的旧工作经历,再批量保存新的工作经历(页面传回的是全量数据)
        empExprMapper.deleteByEmpId(emp.getId());
        List<EmpExpr> exprList = emp.getExprList();
        if (exprList != null && !exprList.isEmpty()) {
            exprList.forEach(expr -> {
                expr.setEmpId(emp.getId()); //设置经历对应的员工ID
                expr.setId(null); //旧主键置空,避免影响自增插入
            });
            empExprMapper.insertBatch(exprList);
        }
    }

mapper

package com.itheima.mapper;

import com.itheima.pojo.EmpExpr;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface EmpExprMapper {

    /**
     * 批量插入员工工作经历信息
     * @param exprList
     */
    void insertBatch(List<EmpExpr> exprList);

    /**
     * 根据员工ID批量删除工作经历
     * @param empIds
     */
    void deleteByEmpIds(@Param("empIds") List<Integer> empIds);

    /**
     * 根据员工ID删除工作经历
     * @param empId
     */
    void deleteByEmpId(Integer empId);

    /**
     * 根据员工ID查询工作经历列表
     * @param empId
     */
    List<EmpExpr> getByEmpId(Integer empId);
}
package com.itheima.mapper;

import com.itheima.pojo.EmpExpr;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface EmpExprMapper {

    /**
     * 批量插入员工工作经历信息
     * @param exprList
     */
    void insertBatch(List<EmpExpr> exprList);

    /**
     * 根据员工ID批量删除工作经历
     * @param empIds
     */
    void deleteByEmpIds(@Param("empIds") List<Integer> empIds);

    /**
     * 根据员工ID删除工作经历
     * @param empId
     */
    void deleteByEmpId(Integer empId);

    /**
     * 根据员工ID查询工作经历列表
     * @param empId
     */
    List<EmpExpr> getByEmpId(Integer empId);
}

SQL语句

<?xml version="1.0" encoding="UTF-8" ?>
<!--定义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">
    <!-- 分页条件查询员工列表:左连接部门表带出部门名称,根据条件对象动态拼接 where 条件 -->
    <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>
        </where>
    </select>

    <!-- 根据ID批量删除员工:ids 拼接成 id in (...) 条件 -->
    <delete id="deleteByIds">
        delete from emp where id in
        <foreach collection="ids" item="id" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>

    <!-- 根据ID修改员工:动态 set,只更新非 null 的字段,未传值的字段保持原值 -->
    <update id="updateById">
        update emp
        <set>
            <if test="username != null and username != ''">username = #{username},</if>
            <if test="password != null and password != ''">password = #{password},</if>
            <if test="name != null and name != ''">name = #{name},</if>
            <if test="gender != null">gender = #{gender},</if>
            <if test="phone != null and phone != ''">phone = #{phone},</if>
            <if test="job != null">job = #{job},</if>
            <if test="salary != null">salary = #{salary},</if>
            <if test="image != null and image != ''">image = #{image},</if>
            <if test="entryDate != null">entry_date = #{entryDate},</if>
            <if test="deptId != null">dept_id = #{deptId},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
        </set>
        where id = #{id}
    </update>
</mapper>


<?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.EmpExprMapper">
    <!-- 批量插入员工工作经历:一条 insert 语句拼接多组 values,emp_id 由 service 层回填 -->
    <insert id="insertBatch">
        insert into emp_expr (emp_id, begin, end, company, job) values
        <foreach collection="exprList" item="expr" separator=",">
            (#{expr.empId}, #{expr.begin}, #{expr.end}, #{expr.company}, #{expr.job})
        </foreach>
    </insert>

    <!-- 根据员工ID批量删除工作经历:配合员工批量删除接口,清理多个员工的全部经历 -->
    <delete id="deleteByEmpIds">
        delete from emp_expr where emp_id in
        <foreach collection="empIds" item="empId" open="(" separator="," close=")">
            #{empId}
        </foreach>
    </delete>

    <!-- 根据员工ID删除工作经历:配合修改接口,先删旧经历再插新经历 -->
    <delete id="deleteByEmpId">
        delete from emp_expr where emp_id = #{empId}
    </delete>

    <!-- 根据员工ID查询工作经历列表:按开始时间降序,用于编辑页面回显 -->
    <select id="getByEmpId" resultType="com.itheima.pojo.EmpExpr">
        select id, emp_id, begin, end, company, job from emp_expr where emp_id = #{empId} order by begin desc
    </select>
</mapper>
OA源代码C#漂亮通用OA企业办公系统 OA人事办公软件asp.net源码1、开发环境为Visual Studio 2012,数据库为SQLServer2008或以上版本,使用.net 4.0+开发。2、管理员登陆名为:admin 密码:admin3、默认数据库连接字符串在webconfig配置文件中修改4、修改版为数据库请使用【备份数据库文件】中.bak文件还原即可1、包含常用办公所有功能(财务,档案,人力资源,审批,会议,文件,业务等功能);2、多年的技术积累和大量用户需求的汇总调整,保证了系统的安全性稳定性、易操作、管理维护简单的特点;3、系统设计开发的规范性与全面性,利于系统的实现、测试、维护、版本升级等。开发人员既可全面了解OA系统所涉及的业务,也能对本身技术提升有所助益,同时减轻了团队开发压力,节约了开发成本;4、采用B/S架构,用户通过浏览器即能进行联网访问办公。功能介绍1、个人办公a、内部邮件b、Internet邮件c、通讯薄d、个人设置2、审批流程a、审批流程b、流程设置c、印章管理3、公文收发a、公文收发4、工作管理a、工作管理5、下属任务a、下属任务6、知识文档a、知识文档7、扩展应用a、资产管理b、培训记录c、会议管理d、车辆管理e、图书管理f、档案卷库g、考试管理h、学习管理8、客户关系a、会员管理b、我的客户c、客户管理9、进销存类a、产品管理b、销售管理c、采购管理d、供应商管理e、财务模块10、项目管理a、项目管理11、人力资源a、考勤管理12、报表中心a、报表中心13、信息交流a、信息交流14、组织机构a、组织机构15、附件程序a、附件程序16、系统管理a、系统管理
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莲湖区邓紫棋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值