欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于通用 Mapper 编写 api 接口 和 事务的传播

程序员文章站 2022-03-28 11:13:57
...

如何 基于通用 Mapper 编写 api 接口

1. 在 数据库中新建一张 stu 学生 表

通过数据库逆向工具生成 各种需要的文件
基于通用 Mapper 编写 api 接口 和 事务的传播

2. 在 foodie-service层 com.imooc.service 编写接口

package com.imooc.service;
import com.imooc.pojo.Stu;

public interface StuService {

    public Stu getStuInfo(int id);

    public void saveStu();

    public void updateStu(int id);

    public void deleteStu(int id);
}

2,在service 下新建 impl包,编写 serviceImpl 实现刚才的接口

package com.imooc.service.impl;

import com.imooc.mapper.StuMapper;
import com.imooc.pojo.Stu;
import com.imooc.service.StuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Service
public class StuServiceImpl implements StuService {

    @Autowired
    private StuMapper stuMapper;	// 注入mapper

    @Transactional(propagation = Propagation.SUPPORTS)			// 事务支持
    @Override
    public Stu getStuInfo(int id) {
        return stuMapper.selectByPrimaryKey(id);		// 通用mapper 提供的方法
    }

    @Transactional(propagation = Propagation.REQUIRED)
    @Override
    public void saveStu() {
        Stu stu = new Stu();			// 模拟增加

        stu.setName("jack");
        stu.setAge(18);
        stuMapper.insert(stu);
    }

    @Transactional(propagation = Propagation.REQUIRED)
     @Override
    public void updateStu(int id) {			// 模拟更新
        Stu stu = new Stu();
        stu.setId(id);
        stu.setName("zhangsan");
        stu.setAge(20);
        stuMapper.updateByPrimaryKey(stu);
    }

    @Transactional(propagation = Propagation.REQUIRED)
    @Override
    public void deleteStu(int id) {
        stuMapper.deleteByPrimaryKey(id);
    }
}

** 3.在 启动类中 加入要扫描的 mapper包***

@SpringBootApplication
@MapperScan(basePackages = "com.imooc.mapper")  // tk.mybatis  **注意是 是哪个包下的**
// 扫描所有需要的包,相关组件包
@ComponentScan(basePackages = {"com.imooc"})
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

4. 编写 StuController 方法测试

package com.imooc.controller;


import com.imooc.service.StuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;

@RestController			// @RestController注解相当于@ResponseBody + @Controller合在一起的作用
public class StuController {

    @Autowired
    private StuService stuService;	// 注入 service

    @GetMapping("/getStu")
    public Object getStu(int id){
       return stuService.getStuInfo(id);
    }

    @PostMapping("/saveStu")
    public Object saveStu(int id){
        stuService.saveStu();
        return "insert ok";
    }

    @PostMapping("/updateStu")
    public Object updateStu(int id){
        stuService.updateStu(id);
        return "update ok";
    }

    @PostMapping("/deleteStu")
    public Object deleteStu(int id){
        stuService.deleteStu(id);
        return "delete ok";
    }
}

5.测试方法,使用postman 测试

加入数据后,测试查询

基于通用 Mapper 编写 api 接口 和 事务的传播

测试 添加基于通用 Mapper 编写 api 接口 和 事务的传播

测试 更新数据

基于通用 Mapper 编写 api 接口 和 事务的传播
数据库 结果 id=1230 被修改
基于通用 Mapper 编写 api 接口 和 事务的传播

删除测试

基于通用 Mapper 编写 api 接口 和 事务的传播
测试结果 同我们想要的一致

二.事务的传播

PROPAGATION_REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。

PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。

PROPAGATION_MANDATORY:使用当前的事务,如果当前没有事务,就抛出异常。

PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。

PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。

PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED 相同

经常使用的如 SUPPORTS(一般查询), REQUIRED(增删改)

相关标签: 项目实战