浅谈controller中调用多个service方法的问题

目录
  • controller调用多个service方法
  • controller调用service中方法的一些事物问题

controller调用多个service方法

  • 一般service方法是有事务的,把所有操作封装在一个service方法中是比较安全的。
  • 如果在controller中调用多个service方法,只有查询的情况下是可以这样的。

controller调用service中方法的一些事物问题

关于在开发过程中的事务传播的一个问题:

  • controller 调用service中a方法,a方法没有加事务,a方法调用了service中b方法,b方法有事务。
  • 那么会出现a方法报错时,b方法中的事务不会回滚,事务会提交b方法报错时,a方法中的事务也会直接提交,不会回滚。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • DTO 实现 service 和 controller 之间值传递的操作

    概念 DTO( Data Transfer Object): 数据传输对象,Service 或 Manager 向外传输的对象. BO:business object 业务对象.主要作用是把业务逻辑封装为一个对象.这个对象可以包括一个或多个其它的对象.比如一个简历,有教育经历.工作经历.社会关系等等.我们可以把教育经历对应一个 PO,工作经历对应一个 PO,社会关系对应一个 PO.建立一个对应简历的 BO 对象处理简历,每个 BO 包含这些 PO.这样处理业务逻辑时,我们就可以针对 BO 去处理

  • 解决springboot报错找不到自动注入的service问题

    springboot报错找不到自动注入的service 找了不少资料,最后发现是每个service接口(虽然已经使用了@service注解)的实现类都需要加上@service注解. 如果是使用junit生成的测试类,发现无法自动注入服务的话 在test启动类前加上 @RunWith(SpringRunner.class) @SpringBootTest @ComponentScan("com.XXX.service") 这是因为test包和启动类不在同一个包或子包下,无法自动注入 Sp

  • springBoot controller,service,dao,mapper,model层的作用说明

    目录 零.业务逻辑 一.Dao(Data Access Object):数据存储对象 二.Service:服务 三.Controller:控制器 四.model:模型 五.View层 六.它们之间的关系 DAO层.Service层和Controller层的区别 1.dao层:数据访问层 2.service层:服务层 3.controller层 关系 零.业务逻辑 Controller-->service接口-->serviceImpl-->dao接口-->daoImpl-->

  • spring根据controller中接收请求参数不同走不同service的实现方法

    前言 前几天一个工程中,需要实现这样一个场景:根据前端发送过来的请求参数的不同,走不同的 service(可同事走多个),最初我的思路是尝试实现在 spring 中实现动态的依赖注入,也就是根据请求参数,动态的在 controller 中注入某个 service 接口的特定实现(接口有多个实现),但是发现这个实现不了,然后想了想,换了个思路,重新设计了一下,实现了需求中的场景. 附controller的分类: 正文 我的解决办法是,使用"生产线工人工作能力自己掂量机制"来解决,这名字我

  • 聊聊注解@controller@service@component@repository的区别

    目录 注解@controller@service@component@repository的区别 命名不一样主要是为了区分类的作用和所属层级: Spring中的主要注解 1. 组件类注解@Component.@Repository.@Service.@Controller[创建注解] 1.@Component 标注为一个普通的spring Bean类 2.@Repository 标注为一个DAO层的组件类 3.@Service 标注为Service层(业务逻辑层)的组件类 4.@Controll

  • springboot如何解决非controller类引用service的问题

    目录 解决非controller类引用service问题 解决办法 总的代码如下 在非controller层如何调用service层服务 通过init方法进行服务注入 调用方法形式如下 解决非controller类引用service问题 项目中遇到需要采用socket通信机制,由于这个方法没有写在控制类里面,调用service类的时候老是报java.lang.NullPointerException错误 解决办法 1.首先将@Autowired注解注入Service或者Mapper接口  @Au

  • 浅谈controller中调用多个service方法的问题

    目录 controller调用多个service方法 controller调用service中方法的一些事物问题 controller调用多个service方法 一般service方法是有事务的,把所有操作封装在一个service方法中是比较安全的. 如果在controller中调用多个service方法,只有查询的情况下是可以这样的. controller调用service中方法的一些事物问题 关于在开发过程中的事务传播的一个问题: controller 调用service中a方法,a方法没有

  • 浅谈js中调用函数时加不加括号的问题

    其实总结起来如下: 函数只要是要调用它进行执行的,都必须加括号.此时,函数()实际上等于函数的返回值.当然,有些没有返回值,但已经执行了函数体内的行为,这个是根本,就是说,只要加括号的,就代表将会执行函数体代码. 不加括号的,都是把函数名称作为函数的指针,用于传参,此时不是得到函数的结果,因为不会运行函数体代码.它只是传递了函数体所在的地址位置,在需要的时候好找到函数体去执行. 所以一般时候我们都是采用的是无括号的原因.这也是由于括号的二义性,因为括号是"函数调用运算符",相当于在执行

  • 浅谈PHP中try{}catch{}的使用方法

    PHP中try{}catch{}的作用是用来处理异常.可以为我们收集并显示出错误信息.希望通过这篇文章的介绍,大家能掌握这一语句的应用. 在PHP语言中有许多语法需要我们去不断的熟悉,然后才能灵活的运用,编写我们需要的代码程序.在这篇文章中我们将为大家介绍PHP中try{}catch{}的用法. <?php try { //... } catch(Exception $e) { //... } ?> PHP中try{}catch{}是异常处理. 将要执行的代码放入TRY块中,如果这些代码执行过

  • 浅谈JavaScript 中有关时间对象的方法

    ECMAScript中的Date类型是在早期 Java 中的 Java.unile.Date 类基础上构建的.为此 Date 类型使用自 UTC (Coordinated Universal Time, 国际协调时间)1970年1月1日午夜开始经过的毫秒数来保存日期. 在这种数据存储格式下, Date 类型保存的日期能够精确到1970年1月1日之前或之后的285616年 •Date.parse(string) 接受一个表示日期的字符串参数,然后尝试根据这个字符串返回相应日期的毫秒数,不能转换则返

  • 浅谈Vue中插槽slot的使用方法

    如何定义和使用: 在组件的template中使用slot标签定义,slot标签中间可以定义默认显示值,如果slot标签没有声明name属性值,在使用插槽时将默认从第一个插槽依次往下放置,为了方便使用,一般都会都插槽slot指定一个name属性值,当要使用该插槽时,只需要在要使用的标签内添加slot='插槽名字',就可以将指定的标签放到指定的插槽内,插槽内可以是任意内容. 举例: <!DOCTYPE html> <html lang="en"> <head&

  • 浅谈MySQL中group_concat()函数的排序方法

    group_concat()函数的参数是可以直接使用order by排序的.666.. 下面通过例子来说明,首先看下面的t1表. 比如,我们要查看每个人的多个分数,将该人对应的多个分数显示在一起,分数要从高到底排序. 可以这样写: SELECT username,GROUP_CONCAT(score ORDER BY score DESC) AS myScore FROM t1 GROUP BY username; 效果如下: 以上这篇浅谈MySQL中group_concat()函数的排序方法就

  • 浅谈js中StringBuffer类的实现方法及使用

    如下所示: <strong>JAVA中有一个StringBuffer类,js中却没有下面来自己实现一个简单的js的StringBuffer类.</strong> //创建一个StringBuffer类 ,此类有两个方法:一个是append方法一个是toString方法 function StringBuffer() { this.__strings__ = []; }; StringBuffer.prototype.append = function(str) { this.__s

  • 浅谈python中真正关闭socket的方法

    close方法可以释放一个连接的资源,但是不是立即释放,如果想立即释放,那么在close之前使用shutdown方法 shut_rd() -------关闭接受消息通道 shut_wr()--------关闭发送消息通道 shut_rdwr()-------连个通道都关闭 使用:在close()之前加上shutdown(num)即可  [shut_rd(), shut_wr(), shut_rdwr()分别代表num 为0  1  2 ] (但是测试过close()关闭,发现如果关闭后,那么ac

  • 浅谈dataframe中更改列属性的方法

    在读取文件时将整数变量读成了字符串, 或者需要转换列属性时,通过方法astype Python中 举例: dataframe.numbers=dataframe.numbers.astype(float) province.id=province.id.astype(str) R中 举例: data<-read.csv('data.csv',col.names = c('id','sex','numbers'),stringsAsFactors=FALSE),stringsAsFactors=F

  • 浅谈angularJS2中的界面跳转方法

    链接参数数组保存路由导航时所需的成分: 指向目标组件的那个路由的路径(path) 必备路由参数和可选路由参数,它们将进入该路由的URL 我们可以把RouterLink指令绑定到一个数组,就像这样: <a [routerLink]="['/heroes']">Heroes</a> 在指定路由参数时,我们写过一个双元素的数组,就像这样: this.router.navigate(['/hero', hero.id]); 我们可以在对象中提供可选的路由参数,就像这样:

随机推荐