springboot開啟事務很簡單,只需要一個注解@Transactional 就可以了。因為在springboot中已經(jīng)默認對jpa、jdbc、mybatis開啟了事事務,引入它們依賴的時候,事物就默認開啟。當然,如果你需要用其他的orm,比如beatlsql,就需要自己配置相關的事物管理器。
準備階段
以上一篇文章的代碼為例子,即springboot整合mybatis,上一篇文章是基于注解來實現(xiàn)mybatis的數(shù)據(jù)訪問層,這篇文章基于xml的來實現(xiàn),并開啟聲明式事務。
環(huán)境依賴
在pom文件中引入mybatis啟動依賴:
1
2
3
4
5
|
< dependency > < groupId >org.mybatis.spring.boot</ groupId > < artifactId >mybatis-spring-boot-starter</ artifactId > < version >1.3.0</ version > </ dependency > |
引入MySQL 依賴
1
2
3
4
5
6
7
8
9
10
|
< dependency > < groupId >mysql</ groupId > < artifactId >mysql-connector-java</ artifactId > < scope >runtime</ scope > </ dependency > < dependency > < groupId >com.alibaba</ groupId > < artifactId >druid</ artifactId > < version >1.0.29</ version > </ dependency > |
初始化數(shù)據(jù)庫腳本
1
2
3
4
5
6
7
8
9
10
11
|
-- create table `account` # DROP TABLE `account` IF EXISTS CREATE TABLE `account` ( `id` int (11) NOT NULL AUTO_INCREMENT, ` name ` varchar (20) NOT NULL , `money` double DEFAULT NULL , PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; INSERT INTO `account` VALUES ( '1' , 'aaa' , '1000' ); INSERT INTO `account` VALUES ( '2' , 'bbb' , '1000' ); INSERT INTO `account` VALUES ( '3' , 'ccc' , '1000' ); |
配置數(shù)據(jù)源
1
2
3
4
5
6
|
spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver mybatis.mapper-locations=classpath*:mybatis/*Mapper.xml mybatis.type-aliases-package=com.forezp.entity |
通過配置mybatis.mapper-locations來指明mapper的xml文件存放位置,我是放在resources/mybatis文件下的。mybatis.type-aliases-package來指明和數(shù)據(jù)庫映射的實體的所在包。
經(jīng)過以上步驟,springboot就可以通過mybatis訪問數(shù)據(jù)庫來。
創(chuàng)建實體類
1
2
3
4
5
6
7
8
9
|
public class Account { private int id ; private String name ; private double money; getter.. setter.. } |
數(shù)據(jù)訪問dao 層
接口:
1
2
3
|
public interface AccountMapper2 { int update( @Param ( "money" ) double money, @Param ( "id" ) int id); } |
mapper:
1
2
3
4
5
6
7
8
9
10
|
<? xml version = "1.0" encoding = "UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> < mapper namespace = "com.forezp.dao.AccountMapper2" > < update id = "update" > UPDATE account set money=#{money} WHERE id=#{id} </ update > </ mapper > |
service層
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@Service public class AccountService2 { @Autowired AccountMapper2 accountMapper2; @Transactional public void transfer() throws RuntimeException{ accountMapper2.update( 90 , 1 ); //用戶1減10塊 用戶2加10塊 int i= 1 / 0 ; accountMapper2.update( 110 , 2 ); } } |
@Transactional,聲明事務,并設計一個轉(zhuǎn)賬方法,用戶1減10塊,用戶2加10塊。在用戶1減10 ,之后,拋出異常,即用戶2加10塊錢不能執(zhí)行,當加注解@Transactional之后,兩個人的錢都沒有增減。當不加@Transactional,用戶1減了10,用戶2沒有增加,即沒有操作用戶2 的數(shù)據(jù)。可見@Transactional注解開啟了事物。
結(jié)語
springboot 開啟事物很簡單,只需要加一行注解就可以了,前提你用的是jdbctemplate, jpa, mybatis,這種常見的orm。
源碼下載:https://github.com/forezp/SpringBootLearning
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:http://blog.csdn.net/forezp/article/details/70833629