添加事务,封装响应数据

devtools/2024/11/30 12:55:02/
(4)在业务中添加事务管理
  • 创建平台事务管理器==》实际是jdbc的事务
public class JdbcConfig {@Beanpublic PlatformTransactionManager transactionManager(DataSource ds){DataSourceTransactionManager transactionManager =new    DataSourceTransactionManager();transactionManager.setDataSource(ds);return transactionManager;}
}
  • 开启事务管理器注解支持

@EnableTransactionManagement
public class SpringConfig {}
  • 在接口上开启事务管理

@Transactional
public interface BookService {...}
(5)封装表现层数据
  • 前端接收数据格式==》创建结果模型类

    • 封装数据到data中

    • 封装操作结果到code中==》不同code对应不同操作结果

    • 封装特殊消息到message(msg)属性中

    • 期待格式

  • 设置统一数据返回结果类

public class Result {private Object data;private Integer code;private String msg;setter、getter...
}
  • 该结果类的成员属性不固定,根据需求添加

  • 该结果类的构造方法书写多个,方便返回灵活的数据

  • 封装对应的code编码==》不是标准,前后端协议沟通一致即可

public class Code {public static final Integer SAVE_OK = 20011;//新增成功public static final Integer SAVE_ERR = 20010;//新增失败public static final Integer DELETE_OK = 20021;//删除成功public static final Integer DELETE_ERR = 20020;//删除失败public static final Integer UPDATE_OK = 20031;//更新成功public static final Integer UPDATE_ERR = 20030;//更新失败public static final Integer GET_OK = 20041;//查询成功public static final Integer GET_ERR = 20040;//查询失败
}
  • 将表现层返回数据类型统一为Result类

@PostMapping
public Result save(@RequestBody Book book) {System.out.println("save...");Boolean status = bookService.saveBook(book);System.out.println("save...");return new Result(status ? Code.SAVE_OK : Code.SAVE_ERR, status);
}
​
@DeleteMapping("/{id}")public Result delete(@PathVariable Integer id) {Boolean status = bookService.deleteBook(id);return new Result(status ? Code.DELETE_OK : Code.DELETE_ERR, status);
}
​
@PutMapping
public Result update(@RequestBody Book book) {Boolean status = bookService.updateBook(book);return new Result(status ? Code.UPDATE_OK : Code.UPDATE_ERR, status);
}
​
@GetMapping
public Result getAllBook() {List<Book> books = bookService.selectAllBook();Integer code = books != null ? Code.GET_OK : Code.GET_ERR;String msg = books != null ? "" : "查询失败,请重试!";return new Result(code,books,msg);
}
​
@GetMapping("/{id}")
public Result getBookById(@PathVariable Integer id) {Book book = bookService.selectBookById(id);Integer code = book != null ? Code.GET_OK : Code.GET_ERR;String msg = book != null ? "" : "查询失败,请重试!";return new Result(code,book,msg);
}

http://www.ppmy.cn/devtools/138198.html

相关文章

Elasticsearch 分片分配策略讲解与实战

ES 分片分配策略讲解与实战 Elasticsearch分片分配策略讲解与实战:深入探索与实践指南1. 引言1.1 博客目的与读者定位1.2 Elasticsearch分片分配的重要性2. Elasticsearch分片分配基础2.1 分片与副本的概念2.2 分片分配的目标3. 分片分配策略详解3.1 分片分配的基本原则3.2 影…

课程学习 (Curriculum Learning) 介绍及其在 DeepSpeed 框架中的应用:中英双语

中文版 课程学习 (Curriculum Learning) 介绍及其在 DeepSpeed 框架中的应用 1. 课程学习的概念 课程学习&#xff08;Curriculum Learning&#xff09;是机器学习中的一种训练策略&#xff0c;灵感来源于人类学习的过程——从简单到复杂逐步掌握知识。具体来说&#xff0c;…

大厂也在用的分布式链路追踪:TraceIdFilter + MDC + Skywalking

痛点 查线上日志时&#xff0c;同一个 Pod 内多线程日志交错&#xff0c;很难追踪每个请求对应的日志信息。 日志收集工具将多个 Pod 的日志收集到同一个数据库中后&#xff0c;情况就更加混乱不堪了。 解决 TraceId MDC 前端每次请求时&#xff0c;添加 X-App-Trace-Id 请…

Python PDF转JPG图片小工具

Python PDF转JPG图片小工具 1.简介 将单个pdf装换成jpg格式图片 Tip: 1、软件窗口默认最前端&#xff0c;不支持调整窗口大小&#xff1b; 2、可通过按钮选择PDF文件&#xff0c;也可以直接拖拽文件到窗口&#xff1b; 3、转换质量有5个档位&#xff0c;&#xff08;0.25&a…

C++类的自动转换和强制类型转换

目录 一、类型转换 二、转换函数 一、类型转换 C⽀持内置类型隐式类型转换为类类型对象&#xff0c;需要有相关内置类型为参数的构造函数 简单说就是可以将内置类型转化为自定义类型 示例&#xff1a; class Test { public:Test(int n1 0):num1(n1){}void pr…

Unity3D ngui和ugui区别与优缺点详解

前言 Unity3D是一款跨平台的游戏开发引擎&#xff0c;它支持多种平台&#xff0c;包括PC、移动设备和主机。在Unity3D中&#xff0c;UI系统是游戏开发中非常重要的一部分&#xff0c;它负责游戏中的用户界面的显示和交互。 对惹&#xff0c;这里有一个游戏开发交流小组&#…

40分钟学 Go 语言高并发:Go程序性能优化方法论

Go程序性能优化方法论 一、性能指标概述 指标类型关键指标重要程度优化目标CPU相关CPU使用率、线程数、上下文切换⭐⭐⭐⭐⭐降低CPU使用率&#xff0c;减少上下文切换内存相关内存使用量、GC频率、对象分配⭐⭐⭐⭐⭐减少内存分配&#xff0c;优化GC延迟指标响应时间、处理延…

【VBA实战】使用Word制作简易的考试及阅卷系统

这个事源于公司想简化面试流程&#xff0c;希望能通过一些简单的笔试及自动阅卷来提高对候选人的初步筛选工作的效率和准确性。我当时的想法是这样的&#xff1a; 1. 利用AI工具生成一个笔试题库&#xff0c;只要选择题和填空题 2. 利用VBA工具&#xff0c;根据需求自动从题库…