springboot+mybatis事务使用 5C

大家好我使用springboot集成mybatis,在一个业务处理中使用for循环插入数据,

比如list中有十条数据,for执行mappe.insert(user)十次,我的理解是方法上使用了

 @Transactional

如果后面insert报错,前面插入的数据也会回滚,但是实际没有,我的理解哪里有问题吗?

5个回答

1、事务是否生效:1)数据库是否支持,引擎是否支持,2)Spring是否开启事务支持 3、AOP是否拦截事务注解
2、采用批处理insert语句

参考推荐:https://www.roncoo.com/course/list.html?courseName=mybatis

首先看你的数据库存储类型是否支持事物,然后看是否开启事物支持@EnableTransactionManager,然后也可以批量插入操作

如果数据库是支持事务,并且已经开启了事务支持,在for循环所在方法上添加 @Transactional 是可以实现事务控制,你的没实现,就从这两个地方找找原因吧,还有,尽可能减少访问数据库的次数,必要情况下可以使用批处理

当你的事物配置全部没问题的时候需要注意下面两点。
1. 你的for是在加了@Transactional的方法里面循环的执行插入数据的,而不是你在一个for循环里面去调用一个加了@Transactional的事物方法插入数据。
2. 在你的事物方法里面,如果出现异常需要直接往方法外面抛出,不能使用try catch来解决异常,哪怕是使用了也需要在catch里面在继续throw 一个异常。
当其遇到异常就会直接回滚。

https://blog.csdn.net/qq_31122833/article/details/80567651

1、在方法体上加上:
@Transactional(rollbackFor = Exception.class)

2、在方法体内,写try catch捕捉。当抛异常时: 

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//回滚

logger.error(e.getMessage(),e);

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
SpringBoot 整合 MyBatis 及引入事务
1、导入需要的包                <!--mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <...
SpringBoot集成MyBatis开启事务
SpringBoot集成MyBatis开启事务
SpringBoot使用事务
事务是很多项目中需要注意的东西,有些场景如果没有加事务控制就会导致一些脏数据进入数据库,本文简单介绍SpringBoot怎样使用事务。 本文使用的是之前整合JPA的文章,具体可以参考 传送门。 无论是配置还是pom文件等等,没有任何改变,改变的是测试的controller上面的两个方法,其中一个方法使用了@Transactional注解来进行事务控制。 controller代码如下: ...
Springboot事务使用与回滚
Springboot中事务的使用: 1、启动类加上@EnableTransactionManagement注解,开启事务支持(其实默认是开启的)。 2、在使用事务的public(只有public支持事务)方法(或者类-相当于该类的所有public方法都使用)加上@Transactional注解。 在实际使用中一般是在service中使用@Transactional,那么对于controlle...
mybatis使用方式(SpringBoot)
1. mybatis的依赖引入 <!--mybatis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <versio...
SpringBoot整合Mybatis及分页插件pageHelper和事务
spring事务分类: 1.声明事务 2.编程事务 spring事务原理:AOP技术 环绕通知进行拦截 使用spring事务的注意事项:不要Try。因为要将异常抛出给外层 Springboot默认集成事务,只要在方法上加上@Transactional注解 pom.xml配置文件: <project xmlns="http://maven.apache.org/POM/4.0.0" xm...
SpringBoot集成Mybatis 时开启事务
1、首先在启动类加上 @EnableTransactionManagement(proxyTargetClass = true) 注:proxyTargetClass默认为false,springboot的事务是以 JDK dynamic proxy 实现的。我不加之前启动报错 Action: Consider injecting the bean as one of its inte...
springboot mybatis多数据源加事务嵌套
springboot mybatis多数据源加事务嵌套 事务之间的调用 回滚 亲测可用 定义2个库分别建立 CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户编号', `user_name` varchar(25) DEFAULT NULL COMMENT '用户名称', `description` varchar(25) DEFAULT NULL COMMENT '描述', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; CREATE TABLE `city` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '城市编号', `province_id` int(10) unsigned NOT NULL COMMENT '省份编号', `city_name` varchar(25) DEFAULT NULL COMMENT '城市名称', `description` varchar(25) DEFAULT NULL COMMENT '描述', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
springboot集成mybatis添加注解事务
public class Country { //实体类参考本人博客地址:https://blog.csdn.net/yl_hahha/article/details/80208161 private long id; private String countryname; private String countrycode; public long ge...
springmvc mybatis,注解事务的使用
 两个XML配置中,需要把扫描的类区分出来。   spring-mybatis.xml(application.xml):   <!-- 自动扫描 --> <context:component-scan base-package="com.maiken" > <!-- 父容器不加载 action --> &lt...
springboot整合mybatis,mybatis的拦截器不能使用
springboot整合mybatis,mybatis的拦截器不能使用,没用springboot的时候,直接在mybatis的配置文件里面添加个 plugin 就可以,换了springboot,mybatis的配置文件没有了,不知道怎么注册拦截器了。rn以前mybatis配置文件配置如下: rn rn rnrnrnspringboot的拦截器如下:rn@Intercepts( @Signature(type = StatementHandler.class, method = "prepare", args = MappedStatement.class, Object.class ) )rn//@Service 启动报错rn//@Component 启动报错rnpublic class SqlInterceptorCount implements Interceptor rnrn private Logger log = LoggerFactory.getLogger(SqlInterceptorCount.class);rn private static final ObjectFactory DEFAULT_OBJECT_FACTORY = new DefaultObjectFactory();rn private static final ObjectWrapperFactory DEFAULT_OBJECT_WRAPPER_FACTORY = new DefaultObjectWrapperFactory();rn private static final ReflectorFactory DEFAULT_REFLECTOR_FACTORY = new DefaultReflectorFactory();rnrn @Overridern public Object intercept(Invocation invocation) throws Throwable rnrn StatementHandler statementHandler = (StatementHandler) invocation.getTarget();rnrn MetaObject metaStatementHandler = MetaObject.forObject(statementHandler, DEFAULT_OBJECT_FACTORY,rn DEFAULT_OBJECT_WRAPPER_FACTORY,DEFAULT_REFLECTOR_FACTORY);rnrn MappedStatement mappedStatement = (MappedStatement) metaStatementHandler.getValue("delegate.mappedStatement");rnrn HashMap mapParam = (HashMap) metaStatementHandler.getValue("delegate.boundSql.parameterObject");rnrnrn .rn .rn .rnrnrn catch (Exception e)rn// e.printStackTrace();rn rn // 继续执行拦截之前的操作rnrn return invocation.proceed();rn rnrn @Overridern public Object plugin(Object o) rn return null;rn rnrn @Overridern public void setProperties(Properties properties) rnrn rnrnrn跪求各位路过的大神指点,谢谢大家
Mybatis 的使用(集成Spring、SpringBoot)
昨天在学习项目工程时发现项目对mybatis用的还是挺多的,之前也是有用过,觉得还是自己做下笔记记录一下。Mybatis是一个数据访问层框架,和大多数同类框架一样,Mybatis节省了开发人员使用jdbc底层操作数据库很大一部分代码,使用mybatis,开发人员只需要将sql写在配置文件中,并声明该sql返回值和java类型的映射即可。当然mybatis还支持针对接口编程,如果你把mybatis和...
SpringBoot Mybatis使用字段参数
添加属性:statementType=”STATEMENT” 变量从原来的 #{param} 变成 ${param} 传递的非字段参数如果是字符串需要用单引号括起来 <update id="updateCategoryStatus" statementType="STATEMENT"> update tbl_categorys ...
springboot mybatis 整合及使用详细说明
第一部分:配置mybatis及其自动生成代码插件 https://blog.csdn.net/qq_34756209/article/details/84133778 这篇文章有详细解答。 第二部分生成文件之后,调用的问题 1.先看下项目的整体结构 我这里讲mapper的接口和xml文件放在一起了。这里要注意需要在application.yml里添加东西。后面说 2.接下来看看下各...
SpringBoot | 第三十五章:Mybatis的集成和使用
2019独角兽企业重金招聘Python工程师标准>>> ...
springBoot学习(三)Mybatis的使用
以oracle数据库为例 1、引入资源  <!-- Mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> &lt...
Springboot整合MyBatis(注解方式使用)
包含技术Linux、Redis、spring boot、文件上传下载、FreeMarker、thymeleaf、spring jdbc、Spring Data JPA、 MyBatis、 Mybatis Generator逆向生成、CKEditor、AJAX异步上传文件、Jersey实现应用服务器和文件服务器分离、Elasticsearch
springboot通用mybatis使用示例
1.依赖引入 (1)pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </depend...
SpringBoot使用Mybatis的两个问题
如何打印sql语句 可以在application.properties中配置 mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl 即可展示sql语句并能注解展示数据结果 如何使用插入,并在插入时主键自动使用UUID 目前我是这么使用的, @Insert("insert lianjia(id...
springboot mybatis使用动态数据源的例子
包含mybatis 的 使用以及email的配置使用 可以自己设置使用不同环境下的文件配置
SpringBoot使用自定义Mybatis拦截器
开发过程中经常回需要对要执行的sql加以自定义处理,比如分页,计数等。通过 MyBatis 提供的强大机制,使用插件是非常简单的,只需实现 Interceptor 接口,并指定想要拦截的方法签名即可。 @Intercepts({@Signature(type = Executor.class,method = "query",args = {MappedStatement.class,Object...
springboot使用依赖包配置mybatis(^_^)
  首先来谈谈这个依赖包 mybatis开发团队为Spring Boot 提供了 MyBatis-Spring-Boot-Starter 。 首先,MyBatis-Spring-Boot-Starter will: Autodetect an existing DataSource. Will create and register an instance of a SqlSession...
springboot + mybatis
springboot + mybatis示例项目,非常完美的示例!
springboot mybatis
本例是springboot和mybatis整合进行crud操作的微型demo。简单明了,新手也可以很快掌握。注意,你需要使用tomcat8才能运行。
SpringBoot +mybatis
SpringBoot + mybatis(SpringBoot 集成mybatis)实现SpringBoot 快速搭建
springboot和mybatis
springboot和mybatis整合
SpringBoot视频教程_SpringBoot下事务配置管理
Spring Boot是Spring家族下的一个全新开发框架,其设计目的主要是用来简化Spring应用的创建及开发过程,它提供了自动配置,起步依赖等特性,从而使开发人员从大量的XML配置中解脱出来,Spring Boot致力于在蓬勃发展的应用开发领域(rapid application development)成为领导者。
Mybatis事务(三)事务工厂
在前面一篇博客Mybatis事务(一)事务管理方式中我们提到,mybatis及spring提供了三个事务实现类:JdbcTransaction、ManagedTransaction和SpringManagedTransaction三个事务实现类,同时Mybatis也很友好的给我们提供了对应事务类的生成工厂。 TransactionFactory接口:提供的主要接口是newTransaction(
Mybatis事务(一)事务管理方式
Mybatis管理事务是分为两种方式: (1)使用JDBC的事务管理机制,就是利用java.sql.Connection对象完成对事务的提交 (2)使用MANAGED的事务管理机制,这种机制mybatis自身不会去实现事务管理,而是让程序的容器(JBOSS,WebLogic)来实现对事务的管理 在Mybatis的配置文件中可以配置事务管理方式如下:
spring事务和myBatis事务的设置
spring事务和myBatis事务的设置
Springboot使用xml事务及相关说明
我想在springboot中采用模糊匹配的方式去配置事务,但是使用注解式的方式一直找不到实现的方式,后来找到一种通过xml文件的方式去实现模糊匹配的事务管理器方式。以下介绍一下这种方式的实现。 1,在resource文件夹下添加transaction.xml配置文件 <?xml version="1.0" encoding="UTF-8"?&a
SpringBoot中在Controller中使用事务
@Autowired private PlatformTransactionManager txManager; DefaultTransactionDefinition def = new DefaultTransactionDefinition(); def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIR...
SpringBoot CRUD + 事务 DEMO
SpringBoot CRUD + 事务 DEMO,CSDN竟然不支持0分下载,只能设置1分了
Springboot 事务管理控制
1、在service实现添加事务注解@Transactional 2、回滚事务使用RuntimeException 3、在mapper添加事务注解@Transactional 经过上面三步当数据出错的时候数据才能rollback
SpringBoot事务注解实现原理
首先定义注解@Retention(RetentionPolicy.RUNTIME)//让注解保留到运行时期 @Target(ElementType.METHOD)//标志这个注解是对方法的注解 public @interfase MyTransaction{ String isolation() default "Read Committed"; /*隔离级别 rea
SpringBoot事务管理器
一、配置启动器 package com.mingde; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.transaction.annotation.
Springboot事务如何控制
Spring Boot 使用事务方法: 一、事务管理器设置:(意思是要想@Transactional注解起作用,必须事务管理器开启事务支持) 1、使用 @EnableTransactionManagement 开启事务支持,然后在Service方法上添加注解 @Transactional 。 2、若添加spring-boot-starter-jdbc 依赖,框架会默认注入 DataSou...
springboot事务的理解
springboot的事务是指对于数据库的操作,mysql数据库事务有acid特性 a:原子性 c:一致性 i:隔离性 d:持久性 如下是一个User 类 @Entity @Data @Table(name="t_user") public class User { @Id private int id; @Column(nullable = fa...
springboot 中事务坑
启动类上加@EnableTransactionManagement 然后在方法上加 @Transactional(rollbackFor = Exception.class)即可坑点,调用 @Transactional(rollbackFor = Exception.class)注解方法的方法不能在一个类中像这样...
springboot事务和java异常
1、记得在面试的时候曾遇到过 异常并没有被 “捕获” 到       这是个很常见的小坑,异常并没有被 “捕获” 到,导致事务并没有回滚。我们在业务层代码中,也许已经考虑到了异常的存在,或者编辑器已经提示我们需要抛出异常,但是这里面有个需要注意的地方:并不是说我们把异常抛出来了,有异常了事务就会回滚。我们来看一个例子: @Service public class RoleServiceImp...
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法