1. 程式人生 > >springboot+mybatis 事務管理

springboot+mybatis 事務管理

之前就調研過基於spring和hibernate的事務管理配置,在專案中需要使用mybatis,所有就測試了一下如何使用,感覺還是比較方便的。記錄如下:

1、如何測試事務?

應用場景是有一個刪除操作,需要刪除多個表的多條記錄,並且要求,要嘛都刪除,要嘛都不刪除。

2、mybatis的sql.xml檔案中新增一個刪除方法

    <!-- 刪除一條記錄 -->  
    <delete id="deleteByOneCond" parameterType="java.util.Map">  
        delete from ${params._tableName} where ${params._columnName}  = #{params._value}  
    </delete>

3、applicationcontext.xml中新增

      <bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">     
          <property name="dataSource" ref="MarketingDataSource"></property>
    </bean>
    <tx:annotation-driven/>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:tx="http://www.springframework.org/schema/tx"


    xsi:schemaLocation="http://www.springframework.org/schema/beans   
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

4、新增一個服務,需要使用多個delete方法

@Transactional(isolation=Isolation.SERIALIZABLE,timeout=3000)
	@Override
	public BaseResponse delTheme(BaseBusinessRequest request) {
		DelThemeEntity delThemeEntity=(DelThemeEntity)request;
		BaseResponse baseResponse =new BaseResponse();
		Map map=new HashMap<String,Object>();
		String theme_en=delThemeEntity.getTheme_en();
		//獲取kpis
		map.put("theme_en", theme_en);
		List<KpiEntity> kpis=magiccubeDao2.getKpis(map);
		
		//先刪除kpi下面的figures
		for(KpiEntity kpi:kpis){
			map=new HashMap<String,Object>();
			map.put("_tableName", "KF_MAGICCUBE_ONLINE_FIGURE");
			map.put("_columnName", "kpi_en");
			map.put("_value", kpi.getKpi_en());
			magiccubeDao2.deleteByOneCond(map);
		}
<span style="color:#FF0000;">		//人為製造異常丟擲
		//int a =1/0;</span>
		
		
		//再刪除theme下面的kpi
		map=new HashMap<String,Object>();
		map.put("_tableName", "KF_MAGICCUBE_ONLINE_KPI");
		map.put("_columnName", "theme_en");
		map.put("_value", theme_en);
		magiccubeDao2.deleteByOneCond(map);
		
		//最後刪除theme本身
		map=new HashMap<String,Object>();
		map.put("_tableName", "KF_MAGICCUBE_ONLINE_THEME");
		map.put("_columnName", "theme_en");
		map.put("_value", theme_en);
		magiccubeDao2.deleteByOneCond(map);
		
				
		
		baseResponse.setReturn_code(StatusCode.OK.getValue());
		baseResponse.setReturn_msg(StatusCode.OK.getName());
		return baseResponse;
	}
 

5、測試事務是否正常執行

locations={ "classpath:applicationContext.xml" })很重要,告訴springboot同時載入xml,不然在DI時會報找不到bean的錯誤
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = MagicCube.class,locations={ "classpath:applicationContext.xml" })//springboot 啟動類
@WebAppConfiguration
public class OnlineServiceImplTest {
	
	@Autowired
	public IOnlineService  onlineService;
	
	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	}

	@AfterClass
	public static void tearDownAfterClass() throws Exception {
	}

	@Before
	public void setUp() throws Exception {
	}

	@After
	public void tearDown() throws Exception {
	}

	@Test
	public void testTransactionalDel() {
		DelThemeEntity delEntity=new DelThemeEntity();
		delEntity.setTheme_en("huanlegou_sale");
		onlineService.delTheme(delEntity);
	}

}
6、在1/0執行時,發生執行時異常,異常丟擲,則回滾。在之前刪除的資料會回滾。

相關推薦

springboot mybatis 事務管理

private 測試 love cto frame update 數據源 ren jdbc 本文主要講述springboot提供的聲明式的事務管理機制。 一、一些概念 聲明式的事務管理是基於AOP的,在springboot中可以通過@Transactional註解的方式

SpringBoot+Mybatis事務管理

一、使用場景   在使用事務管理前,有必要先了解下應用場景。如實際過程中一個購買操作包含多個執行過程:查詢庫存、下單、更新庫存,實際操作時,由於高併發存在,可能到下單結束時,更新庫存出錯,那本次購買操作就是失敗的,其下單結果應該被回滾。這種情況就需要引入事務控制,保證整個操

springboot+mybatis 事務管理

之前就調研過基於spring和hibernate的事務管理配置,在專案中需要使用mybatis,所有就測試了一下如何使用,感覺還是比較方便的。記錄如下: 1、如何測試事務? 應用場景是有一個刪除操作,需要刪除多個表的多條記錄,並且要求,要嘛都刪除,要嘛都不刪除。 2、myb

spring,mybatis事務管理配置與@Transactional註解使用[轉]

exception true throws r.java 存在 隔離 enc prot 底層 spring,mybatis事務管理配置與@Transactional註解使用 概述事務管理對於企業應用來說是至關重要的,即使出現異常情況,它也可以保證數據的一致性。Sprin

spring,mybatis事務管理配置與@Transactional註解使用

抽象 classname 初始 for batis 時間限制 自動提交 data second spring,mybatis事務管理配置與@Transactional註解使用 概述事務管理對於企業應用來說是至關重要的,即使出現異常情況,它也可以保證數據的一致性。Spring

Mybatis 事務管理

工廠 height nag 發生 配置 配置文件 pan drive alt mybatis的事務和數據源有著非常密切的聯系。上文講述了mybatis的數據源,本文要講述的便是mybatis的事物 1.事務的分類 我們還是已一段xml配置文件為例 <envir

mybatis事務管理機制詳解

attribute log builder tween gen 事務管理 getc there spro 1.mybatis事務的配置和使用 mybatis事務有兩種使用方式: (a):使用JDBC的事務管理機制:即使用java.Sql.Connection對象完成對事務的

Mybatis事務管理

一、Mybatis事務概述       對於資料庫事務而言,一般包括以下幾個操作:建立、提交、回滾、關閉。MyBatis把這些抽象為Transaction介面:              &nbs

Spring整合MyBatis 事務管理

前言         spring事務管理包含兩種情況,程式設計式事務、宣告式事務。而宣告式事務又包括基於註解@Transactional和tx+aop的方式。那麼本文先分析程式設計式註解事務和基於註解的宣告式事務。 程式設計式事務管理使用TransactionTempla

SSM in Action——MyBatis事務管理和快取機制

MyBatis的事務管理 眾所周知,事務的四個特性ACID。永續性、原子性、隔離性以及一致性。 Transaction介面 mybatis的事務設計重點就是Transaction介面,它有兩個實現類,分別是JdbcTransaction和ManagedTrans

spring,mybatis事務管理 隔離級別與事務傳播

事務隔離級別 隔離級別是指若干個併發的事務之間的隔離程度。TransactionDefinition 介面中定義了五個表示隔離級別的常量: TransactionDefinition.ISOLATION_DEFAULT:這是預設值,表示使用底層資料庫的預設隔離級別。對大

springboot分散式事務管理(atomikos)

最近公司有用到分散式事務管理,結合公司和我上網查詢的一些資料,特來梳理一下我思路。 本篇文章使用時(atomikos)來進行springboot的分散式事務管理 1.引用jta-atomikos架包 <dependency> <groupId>

springMvc+mybatis事務管理不起作用解決

而由於伺服器啟動時的載入Spring相關配置檔案的順序為applicationContext.xml(Spring的配置檔案) ---> applicationContext-mvc.xml(SpringMVC的配置檔案),按照上面的配置Spring載入applicationContext.xml配置

Mybatis事務管理-jdbc事務

一、mybatis.xml配置: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="

Mybatis事務管理的兩種方式

<?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.

springmvc mybatis 事務管理不生效原因

spring-mvc事務配置如下 <tx:advice id="transactionAdvice" transaction-manager="transactionManager"> <tx:attributes><tx:method nam

mybatis---事務管理機制

 MyBatis作為Java語言的資料庫框架,對資料庫的事務管理是其非常重要的一個方面。本文將講述MyBatis的事務管理的實現機制。首先介紹MyBatis的事務Transaction的介面設計

MyBatis事務管理機制

element 成了 logic connect ole sre action mybatis事務 nod MyBatis作為Java語言的數據庫框架,對數據庫的事務管理是其非常重要的一個方面。本文將從事務的分類、配置和實現分析MyBatis的事務管理的實現機制。 MyBa

3.3.6 MyBatis事務管理

新增 sql 語句 led mybatis事務 工具 put lose 管理 數據庫操作 六、MyBatis事務管理 1. 事務(Transaction) (1) 事務是數據庫操作的最小單元, 有 ACID 的特性. 應該保證一個事務的的 SQL 語句要麽同時成功,

SpringBoot學習筆記(三):SpringBoot整合MybatisSpringBoot事務管理SpringBoot多資料來源

SpringBoot整合Mybatis 第一步我們需要在pom.xml裡面引入mybatis相關的jar包 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artif