[Java2023] Day13.事务管理入门

91 阅读1分钟
说明
  • 1.给Service层的方法加个注释就可以了, 比PHP的简单很多
步骤

以删除部门时, 同时删除部门下的员工为场景

  • 1.部门管理控制器中, 不用改动 (代码省略部分)
package com.tlias.controller;

@RestController
public class DeptController {

    @DeleteMapping("/depts/{id}")
    public Result delete(@PathVariable Integer id) {
        log.info("根据ID删除部门", id);
        deptService.delete(id);
        return Result.success();
    }

}
  • 2.部门Service实现
package com.tlias.service.impl;

import com.tlias.mapper.DeptMapper;
import com.tlias.mapper.EmpMapper;
import com.tlias.pojo.Dept;
import com.tlias.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.List;

@Service
public class DeptServiceImpl implements DeptService {

    // 调用部门管理的Mapper(Service调用DAO层)
    @Autowired
    private DeptMapper deptMapper;
    @Autowired
    private EmpMapper empMapper;

    @Override
    public List<Dept> list() {
        return deptMapper.list();
    }

    @Transactional //将事务交给SpringBoot处理
    @Override
    public void delete(Integer id) {

        // 1.1删除部门
        deptMapper.deleteById(id);

        // 强制抛出异常进行测试
        // Integer res = 1 / 0;

        // 2.删除员工
        empMapper.deleteByDeptId(id);
    }

    public void add(Dept dept) {
        dept.setCreateTime(LocalDateTime.now());
        dept.setUpdateTime(LocalDateTime.now());
        deptMapper.add(dept);
    }

    public void update(Dept dept)
    {
        dept.setUpdateTime(LocalDateTime.now());
        deptMapper.update(dept);
    }

    public Dept view(Integer id)
    {
        return deptMapper.view(id);
    }

}
  • 3.员工管理Mapper修改,添加删除方法
package com.tlias.mapper;

import com.tlias.pojo.Emp;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.web.bind.annotation.DeleteMapping;

import java.time.LocalDate;
import java.util.List;

@Mapper
public interface EmpMapper {

    // 使用pageHelper来分页, 这里正常写
//    @Select("SELECT * from emp ") // 注释掉, 就会使用xml
    public List<Emp> list(String name, Short gender, LocalDate begin, LocalDate end);

    void delete(List<Integer> ids);


    @Insert("insert into emp (username, name, gender, image, job, entrydate, dept_id, create_time, update_time) " +
            "values (#{username}, #{name}, #{gender}, #{image}, #{job}, #{entrydate}, #{deptId}, #{createTime}, #{updateTime})")
    void insert(Emp emp);

    @Select("SELECT * from emp where id=#{id} limit 1")
    Emp getById(Integer id);


    void update(Emp emp);

    @Select("SELECT * from emp where username=#{username} and password=#{password}")
    Emp getByUsernameAndPassword(Emp emp);
    
    // 添加根据部门ID删除员工
    @Delete("delete from emp where dept_id=#{deptId}")
    void deleteByDeptId(Integer deptId);
}
  • 4.添加事务日志, 在yml文件中
#spring事务管理日志
logging:
  level:
    org.springframework.jdbc.support.JdbcTransactionManager: debug