spring boot mybatis 整合_spring boot mybatis3 事物配置

教程分享 > Java教程 > Spring (40114) 2024-08-07 11:05:25

引言

    通过之前spring boot mybatis 整合的讲解:
 spring boot mybaties整合  (spring boot mybaties 整合 基于Java注解方式写sql,无需任何得mapper xml文件)

spring boot mybatis 整合_spring boot与mybaties的使用  (spring boot mybaties 整合 xml mapper方式,也是实际应用最多得方式)

我们对于spring boot mybaties 整合有了一个基础的认知。这里主要正对上面得两篇文章中spring boot mybaties整合讲解得一个扩展学习,事物的配置,整合到spring 的事物控制中。

一.环境准备

本博客讲沿用上面的项目进行进一步讲解

二.实战编码

2.1 spring boot 核心配置文件application.properties

#==================DataSource Config Start================== 
#默认采用Tomcat-jdbc-pool性能和并发最好,注意查看maven依赖中是否有tomcat-jdbc
#name
#spring.datasource.name=test
#url
#spring.datasource.url=jdbc:sqlserver://192.168.xxx.xxx;instanceName=sql_03;DatabaseName=edu;integratedSecurity=false
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
#DriverClass
#spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.tomcat.driver-class-name=com.mysql.jdbc.Driver
#DB username
spring.datasource.tomcat.username=root
#DB password
spring.datasource.tomcat.password=root
#最大连接数量
spring.datasource.tomcat.max-active=150
#最大闲置连接数量
spring.datasource.tomcat.max-idle=20
#最大等待时间
#spring.datasource.tomcat.max-wait=5000
#==================DataSource Config End==================

#==================mybaties Config Start==================
#ORM Bean Package
mybatis.type-aliases-package=com.example.pojo
mybatis.mapper-locations=classpath:/mapper/*.xml
#打印mybatiesSql语句
logging.level.com.example.mapper=DEBUG
#==================mybaties Config End  ==================

#模板引擎配置缓存为FALSE。开发调试用
spring.thymeleaf.cache=false
这里注意关注数据连接配置和mybaties的xml mapper文件配置。
 

2.2spring boot mybaties 整合 事物关键配置

MyBatiesConfig.java
package com.example.config;

import javax.sql.DataSource;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

/**
 * mybaties配置扫描mapper路径
 * 
 * @author leftso
 *
 */
@Configuration
@MapperScan(basePackages = { "com.example.mapper" }) /** 注意,这个注解是扫描mapper接口不是xml文件,使用xml模式必须在配置文件中添加xml的配置 **/
@EnableTransactionManagement /**
								 * 启用事物管理 ,在需要事物管理的service类或者方法上使用注解@Transactional
								 **/
public class MyBatiesConfig {
	@Autowired
	private DataSource dataSource;

	/**
	 * 配合注解完成事物管理
	 * 
	 * @return
	 */
	@Bean
	public PlatformTransactionManager annotationDrivenTransactionManager() {
		return new DataSourceTransactionManager(dataSource);
	}
}
注意必须把当前的数据源配置进入spring的注解事物管理器。否则通过spring框架的注解标签@Transactional是不会有事物作用的。

提示:
spring boot 2.1.4.RELEASE 版本无需配置PlatformTransactionManager 也能起作用,也就说仅需要一个注解@EnableTransactionManagement

Spring boot 2.x (Spring 5.0为基础的情况)无需使用@EnableTransactionManagement注解,spring boot 项目内部已经启用

三.事物演示

3.1编写测试代码

package com.example.test;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import com.example.mapper.UserMapper;
import com.example.pojo.User;

@RunWith(SpringRunner.class)
@SpringBootTest
public class TransactionalTest {
	@Autowired
	private UserMapper userMapper;
	
	
	@Test
	public void name() {
		User user=new User("leftso", "男", 1);
		userMapper.insert(user);
		int t=1/0;
		System.out.println(t);
	}
}
执行前查询数据库:
执行前查询数据库:
执行测试代码并观察eclipse的控制台和数据库的数据查询结果:
eclipse的控制台
数据库查询结果
很明显在报错的情况下,数据还是插入进了数据库。这并不是我们正常业务想要的结果。

3.2编辑测试代码,添加spring框架的事物注解

package com.example.test;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;

import com.example.mapper.UserMapper;
import com.example.pojo.User;

@RunWith(SpringRunner.class)
@SpringBootTest
public class TransactionalTest {
	@Autowired
	private UserMapper userMapper;
	
	
	@Test
	@Transactional
	public void name() {
		User user=new User("测试哈哈", "女", 2);
		userMapper.insert(user);
		int t=1/0;
		System.out.println(t);
	}
}

执行代码并观察eclipse和数据库:
spring  boot mybaties 整合测试eclipse控制台输出结果

spring boot mybaties 整合 测试数据库查询结果

这次的操作姿势似乎对了。在报错的情况下数据并没有插入数据库。我们仔细观察spring 控制台输出的日志可以发现事物已经在spring的控制下回滚了。
spring  boot mybaties 整合 测试异常回滚eclipse控制台日志输出结果
从上图也可以看到回滚的日志
 
https://www.leftso.com/article/341.html

相关文章
引言    通过之前spring boot mybatis 整合的讲解: spring boot mybaties整合  (spring boot mybaties 整合 基于Java注解方式写...
spring boot mybatis 整合使用讲解介绍,spring boot与MyBatis的使用讲解介绍。spring boot mybatis xml mapper方式的入门和通过一个简...
spring boot框架整合MyBatis数据库暂时选用MySQL
本文主要讲解spring boot框架整合MyBatis后,如何打印出MyBatis的sql语句以及参数列表
本文旨在介绍如何使用Spring Boot和Mybatis来构建应用程序。Spring Boot是一个基于Spring框架的轻量级框架,可以帮助开发者快速构建应用程序,减少编码和维护时间。Myb...
Spring Boot 2.0 Redis整合,通过spring boot 2.0整合Redis作为spring缓存框架的实现。
spring boot 1.5整合redis实现spring的缓存框架,spring boot,redis
spring boot 2.0 security 5.0 整合,实现自定义表单登录。spring boot 2.0框架使用。
spring boot 入门之整合spring session实现session共享。一直以来Java编程中web项目中的session共享问题都是一个很难解决的问题。接下来将讲解通过sprin...
Spring Boot validation整合hibernate validator实现数据验证,Spring Boot validation使用说明,Spring Boot validat...
前言    本教程主要讲解spring boot如何整合 spring data elasticsearch 实现elasticsearch检索引擎的整合使用
Spring Boot MQTT协议通过spring boot整合apache artemis实现Java语言MQTT协议通信,搭建MQTT服务器可以参考上一篇 MQTT Java入门-搭建MQ...
Java编程中Spring Boot整合RabbitMQ实现消息中间件RabbitMQ的使用
本文章主要简单讲解目前流行的springMVC4+Spring4+MyBatis3(即SSM)框架整合