SpringBoot非官方教程 | 第七篇:SpringBoot開啓聲明式事務

springboot開啓事務很簡單,只須要一個註解@Transactional 就能夠了。由於在springboot中已經默認對jpa、jdbc、mybatis開啓了事事務,引入它們依賴的時候,事物就默認開啓。固然,若是你須要用其餘的orm,好比beatlsql,就須要本身配置相關的事物管理器。java

準備階段

以上一篇文章的代碼爲例子,即springboot整合mybatis,上一篇文章是基於註解來實現mybatis的數據訪問層,這篇文章基於xml的來實現,並開啓聲明式事務。mysql

環境依賴

在pom文件中引入mybatis啓動依賴:git

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.0</version>
</dependency>

引入mysql 依賴:github

<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>

初始化數據庫腳本

-- 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');

配置數據源

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來指明和數據庫映射的實體的所在包。spring

通過以上步驟,springboot就能夠經過mybatis訪問數據庫來。sql

建立實體類

public class Account {
    private int id ;
    private String name ;
    private double money;

    getter..
    setter..

  }

數據訪問dao 層

接口:數據庫

public interface AccountMapper2 {
   int update( @Param("money") double money, @Param("id") int  id);
}

mapper:springboot

<?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層

@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,聲明事務,並設計一個轉帳方法,用戶1減10塊,用戶2加10塊。在用戶1減10 ,以後,拋出異常,即用戶2加10塊錢不能執行,當加註解@Transactional以後,兩我的的錢都沒有增減。當不加@Transactional,用戶1減了10,用戶2沒有增長,即沒有操做用戶2 的數據。可見@Transactional註解開啓了事物。
結語mybatis

springboot 開啓事物很簡單,只須要加一行註解就能夠了,前提你用的是jdbctemplate, jpa, mybatis,這種常見的orm。app

源碼下載:https://github.com/forezp/Spr...

參考資料

managing-transactions

相關文章
相關標籤/搜索