mybatis+spring如何在事务回滚时向上层返回结果

我是这样写的,但是try catch看着很不美观,而且手动回滚使得控制事务的代码侵入了业务层。

@Service
public class DepartmentServiceImpl {

    @Autowired
    private DepartmentMapper DepartmentMapper;

    @Transactional
    public ServiceResult addDepartment(Department department) {
        try {
            DepartmentMapper.insert(department);
            return new ServiceResult(0, "添加成功");
        } catch (Exception e) {
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return new ServiceResult(-1, "添加失败");
        }
    }

    @Transactional
    public ServiceResult deleteDepartmentById(String id) {
        try {
            DepartmentMapper.deleteByPrimaryKey(id);
            return new ServiceResult(0, "删除成功");
        } catch (Exception e) {
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return new ServiceResult(-1, "删除失败");
        }
    }

} 

如果用第二种写法,虽然很简洁但是不能向上层返回信息

 @Transactional
    public void addDepartment(Department department) {      
        DepartmentMapper.insert(department);        
    }

请问有什么好的办法

0

2个回答

其实你可以把department返回回去,一般来说插入数据库成功后,你的department是会有id的,
如果没成功就不会有id,那么你通过这个来判断就行了。

0

有一个非常简单适用的办法:在第二种写法中方法签名上面加上throws Exception 并交由上层捕获异常完成后续处理

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
mybatis 事务回滚配置
在mybatis进行批量操作的时候,插入多条数据时,设置回滚但是前面几条还是插入,经过尝试,n找到解决方法:nn设置setAutoCommit(false)即可nn SqlSession session = sqlSessionFactory.openSession(false);n Connection conn = session.getConnection();n...
mybatis整合spring、springmvc时业务层无法进行事务回滚问题解决
前言:近期换了新公司,刚来公司就接触了一下mybatis,因为springmvc和spring比较熟悉,我想大概现在绝大部分的公司都在用吧,刚接触mybatis时感觉真心蛋疼,纯sql才处理业务,实在是有点不习惯,不过感觉整个框架较之前的orm架构确实感觉速度快一点nnn好了,直接进入正题n需求:需要在一个业务层方法内完成对两张不同的表进行插入操作nnn一开始我直接在mybatis的
spring mybatis事务回滚配置
1、配置mybatis数据源<?xml version="1.0" encoding="UTF-8" ?>n<beans xmlns="http://www.springframework.org/schema/beans"n xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.spring
Spring事务回滚条件
       在spring项目中,很多时候事务出现了异常,但是却没有回滚,导致数据库中产生脏数据。那位为什么明明出现了异常,事务却没有回滚呢,下面分析一下spring事务回滚的条件。nn       Spring事务回滚机制是这样的:当所拦截的方法有指定异常抛出,事务才会自动进行回滚!nn       1、拦截的方法:nn            事务的控制方式有三种:nn            ...
Spring/SpringMVC/MyBatis整合+事务回滚
Spring/SpringMVC/MyBatis整合,可事务回滚
spring与mybatis整合事务回滚问题
n废话不多说了,直接说情况,接手新的项目,框架是spring+springmvc+mybatis,在service层事务处理时,事务不回滚,看了下配置文件,发现了问题,所以再此说一下,配置事务需要注意的几个问题rn1.web.xml中将spring的配置文件配置到容器中如下:rn&amp;lt;context-param&amp;gt;rn    &amp;lt;param-name&amp;gt;contextConfigLo...
springboot+mybatis事务无法回滚(解决)
在Spring Boot中,当我们使用了spring-boot-starter-jdbc或spring-boot-starter-data-jpa依赖的时候,框 架会自动默认分别注入DataSourceTransactionManager或JpaTransactionManager。所以我们不需要任何额外 配置就可以用@Transactional注解进行事务的使用。nn找到pom文件中有没有spr...
SpringBoot2异常处理之用try/catch错误信息并回滚事务(自动回滚/手动回滚/部分回滚)
问题背景n有时候,我们总是需要再SpringBoot2中对一个Service方法做一个完整的事务,发现异常时,进行回滚,然后又能返回错误信息。n场景一:自动回滚(直接抛出,不try/catch)n@Overriden@Transactional(rollbackFor = Exception.class)npublic Object submitOrder() throws Exception {...
spring+ mybatis 事务不能回滚问题解决
【2018年4月13号更新修改该说明】,之前我说自动扫描要精确到Controller就可以解决回滚问题,确实可以解决问题,自动装配的范围变小了,这样其他的Service层、dao层就不能自动装配了,这样肯定不合理。   原来Spring已经有相关的配置处理这个问题了,如果你项目不能回滚,肯定是把Controller层扫进去了,在application.xml文件中自动扫描配置新增&amp;lt;conte...
SpringBoot-Mybatis处理事务
SpringBoot+Mybatis简单的处理事务回滚
Spring mvc+mybatis+mysql事物回滚不生效问题
    开始我打算在controller里面控制回滚,但尝试很多次无效,于是还是老实的在service里面控制事物回滚。    mysql需要表类型类为innoDB才行。有人说用mysql的话要关闭自动提交autocommit才行,我亲测不关也没问题。    不上不管开不开都可以正常回滚。    关于配置,注意点是spring-mvc中扫描注入时不要扫描service。原因是spring mvc扫...
springmvc mybatis 声明式事务管理回滚失效,(checked回滚)捕捉异常,传输错误信息
一、知识点及问题后端框架: nSpring 、Spring mvc 、mybatis业务需求: n客户端先从服务端获取用户大量信息到客户端,编辑完成之后统一Post至服务端,对于数据的修改要么全成功,要么全失败,所以需要使用事务支持。问题: n配置Spring声明式事务,执行中出现异常未回滚.从网上查询得到一开始是自己的配置出了问题,由于配置文件的加载顺序决定了容器的加载顺序导致Spring事务没有
SpringMVC+Mybatis+事务回滚+异常封装返回
问题的背景:rnrnrn使用dubbo搭建分布式服务架构,service的实现,采用SpringMVC4.1.6+MyBatis3.2.8。为了少维护一个维度,拟对service接口进行通用性定义,即让业务的变化,不影响已定义的service接口。rnrnrn最终Service的方法签名定义如下(示例):rnpublic ServiceResult addProduct(ServiceParam
springmvc mybatis,注解事务的使用
rn 两个XML配置中,需要把扫描的类区分出来。rn rnspring-mybatis.xml(application.xml):rn rn &amp;lt;!-- 自动扫描 --&amp;gt; rn &amp;lt;context:component-scan base-package=&quot;com.maiken&quot; &amp;gt;rn &amp;lt;!-- 父容器不加载 action --&amp;gt;rn &amp;lt...
spring和mybatis在自动事物管理下遇错等不会自动回退,需要手动指定回退的条件或者手动事物管理回退等
spring和mybatis在自动事物管理下遇错等不会自动回退,需要手动指定回退的条件或者手动事物管理回退等n经过验证情况1:n自动事物管理的情况下,遇到异常try -catch进行处理即可,已经执行的sql修改命令不会回退.n经过验证的情况2n自动事物管理的情况下,抛出异常,已经执行的sql修改命令不会回退.n经过验证3.使用注解式事物管理的情况@Transactional(rollbackFo...
Mybatis 事物回滚最简单的操作方式
n如果同一个方法需要同时进行两条sql的update 那么此时为了原子性,需要运用到事物。nn @Transactionaln @ApiOperation(&quot;上移&quot;)n @RequestMapping(value = &quot;/upExamLib&quot;, method = RequestMethod.PUT)n public Result upExamLib(@Valid @Reques...
使用spring整合mybatis时,通过spring加载的mapper操作怎么回滚
1 错误代码:n    try{n    ApplicationContext app = new ClassPathXmlApplicationContext(&quot;applicationContext.xml&quot;);n    String[] beanNames = app.getBeanDefinitionNames();n    factory = app.getBean(SqlSessionF...
spring事务回滚(XML配置文件)
n&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;n&amp;lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot;n xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; n xmlns:p=&quot;http://www.springframewor
springBoot 事物回滚
在Controller里面给自己需要回滚方法上加上@Transactional注解,springBoot自带的事物回滚 只能捕捉RuntimeException异常才能进行事物的回滚。nnnnnnnn数据库里面没加入数据,回滚事物验证成功...
springboot 手动触发事务回滚
在springboot中,使用事务回滚时,添加@Transactional注解。nn1:手动抛出一个异常: throw new RuntimeException();nn2: 通过方法回滚:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();...
springMVC与MyBatis中绑定枚举类型数据的转换
最近项目中遇到这样一个:后台Controller参数是一个对象,对象里面有个枚举类型的属性,前台提交过来的数据里面这个枚举该怎么接收呢,如何写进数据库? n数据库用的MySQL, n该枚举字段为: n n 实际存储为: n n解决方案如下:实体类: n枚举类: n nset与get方法省略…… n接下来是springMVC 中枚举的转换类(Converter)public class String
mybatis事务回滚失败
今天遇到了一个尴尬的问题,在使用mybatis的时候发现事务回滚不了,然后查找了一下资料才知道是mysql引擎的问题:nmysql有几种引擎,当使用InnoDB的时候,才可以进行事务处理n案列如下:nuserMapper.xmln&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&amp;gt;n&amp;lt;!DOCTYPE mappernPUBLIC &quot;-//mybatis....
Spring的事务回滚机制
Spring事务管理是根据异常来进行回滚操作; Spring与Mybatis整合时,虽然在Service方法中并没有check异常,但是如果数据库有异常发生,默认会进行事务回滚。 Spring 如果不添加rollbackFor等属性,Spring碰到Unchecked Exceptions都会回滚,不仅是RuntimeException,也包括Error。rn 如果在事务方法中捕获异常并进行处理,
Spring-test事务自动回滚
测试时使用save()方法向数据库插入一条记录,结果发现通过单元测试了,但是并没有向数据库插入一条记录,一看日志,发现Spring-test对事务进行了回滚。 n为了使测试数据不对数据库造成污染,在使用Spring-test进行的单元测试的时候,默认会对事务进行回滚,即@Rollback 默认是true,如果想要测试数据不回滚,可设置@Rollback(value = false) 。如果是使用My
try catch异常抛出与spring事务回滚策略相关
将异常捕获,并且在catch块中不对事务做显式提交(或其他应该做的操作如关闭资源等)=生吞掉异常;rnrnspring的事务边界是在调用业务方法之前开始的,业务方法执行完毕之后来执行commit or rollback(Spring默认取决于是否抛出runtime异常). 如果抛出runtime exception 并在你的业务方法中没有catch到的话,事务会回滚。 一般不需要在业务方法中cat...
使用自定义异常实现事物回滚
    //controler层n    @ResponseBodyn    @RequestMapping(&quot;/uploadExcle&quot;)n    public R toExale(MultipartFile file) {n        try {n            msg = XXservice.XXX(readExcel);n            return R.ok(msg)...
Spring MVC 注解事务回滚
rnSpring MVC + mybatis + mysql 事务回滚服务层,用@Transactional方式注解事务。rn rn1、mysql建表设置引擎为INNODB,如:rn ALTER TABLE goods_order ENGINE = INNODB; rn rn2、服务层rnpublic interface IGoodsOrderService {rn rn /**rn * 添加订...
Spring myBatis数据库连接异常
报错如下:rnorg.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: rn### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcCo
@Transactional注解事务手动回滚并且返回错误信息
nservice层方法名注解n@Transactional(rollbackFor=Exception.class)nnnntry{nn}catch (Exception e) {nn e.printStackTrace();  //打印错误信息nTransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); //手动回...
springboot+mybatis 整合以及AOP拦截器,事物,自定义异常处理,表单验证等
n n n 1.创建 springboot+mybatis 应用2.pom 文件的编写,需要配置相关数据库连接nnnnnn3.配置 mybatis-config 文件nnnnnn4.配置 datasource nnnnn@Configuration// 配置 mybatis mapper 的扫描路径@MapperScan(&quot;com.qinmei.demo.dao&quot;)p...
Spring MVC 事物回滚
controller  方法头加  @Transactional( rollbackFor = {Exception.class}, readOnly = false )ntry{n .......你带逻辑代码n}catch(Exception e){ n e.printStatckTrace();n TransactionAspectSupport.currentTransa
Spring boot 事务回滚异常
spring boot 事务的使用:nn可以在类上加注解:nn也就是启动 类上加:nnn@EnableTransactionManagementnn事务需要回滚的方法上加注解:nnn@Transactionalnn如果事务不回滚,可以手动回滚  也就是在 catch 里面加入代码完成手动回滚:nnnTransactionAspectSupport.currentTransactionStatus(...
spring-mybatis 事务回滚问题
刚刚开始学习java,学到spring-mybatis  访问数据库,遇到事物回滚问题无法解决rnapplicationContext-mybatis.xml中配置是这样的rnrnrn在ServiceImpl实现类中方法是这样的rnrnrn但是每次注测即使报错,抛出异常也不回滚,仍然可以插入的哦数据库,怎么回事,请大神指教一下,ServiceException是RuntimeException的子
如何在Spring中集成mybatis并实现对数据库的操作
准备工作nn1.建立Maven管理的Spring项目,可参考下面的链接nnhttps://blog.csdn.net/h1025372645/article/details/91125742nn项目结构如下nnnn2:为项目添加jar包nnn&lt;?xml version="1.0" encoding="UTF-8"?&gt;n&lt;project xmlns="http://maven.ap...
spring boot配置mybatis和事务管理
Spring Boot配置Mybatis一、spring boot与mybatis的配置1.首先,spring boot 配置mybatis需要的全部依赖如下:&amp;lt;!-- Spring Boot 启动父依赖 --&amp;gt;n&amp;lt;parent&amp;gt;n&amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;n&amp;lt;artifactId&amp;gt;spring-boot-st
spring 事务日志
rn事务方法日志:rnreating new transaction with name ]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,-ExceptionAcquired Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@1ff05076] for JDBC transactionSwi...
Spring+Mybatis整合事务回滚
花了一晚上时间终于搞出来了Spring整合Mybatis事务回滚(Mysql数据库),控制Service层中的多次插入操作,多次操作整体是一个事务。 里面有缘嘛和jar包,资源为war包,导入即可。运行Test类中的测试代码即可。 建表语句见txt文件。
Spring +mybatis事务处理的疑难杂症
事务处理不起作用1.配置文件是否对了?我这里的背景是spring,springmvc。web.xml可以看到有两个配置文件,一个配置spring,springmvc.这两个的关系就像父亲跟儿子一样。service的扫描要放到和配置事务的统一文件下。且springmvc的文件不能二次扫描。不然就不管用咯!我检查了自己都配置文件ok的。2.throw异常了吗?百度里的能人都说spring默认识别Run...
springboot多数据源事务管理
springboot多数原配置与多事务管理
spring+mybatis 事务之如何在service层配置事务
如何在service层配置事务n关键是事实上,dao层只是简单的增删改查,而实际业务的一个接口肯定不止一个增删改查的一个,有可能是调A接口的删除,在调B接口的添加。这个时候前面那个配置只能保证A接口成功时候的事务,一旦B接口失败,A接口并不会回滚。以上配置只能保证一个dao操作的事务,但实际不可能这么简单的要求。n<tx:annotation-driven transaction-manager="txManager"/>n@Transactional
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 如何在网页制作中加入视频 如何在网页制作中插入视频