第六章 springboot + 事務

來源:互聯網
上載者:User

標籤:wan   姓名   spring   private   cep   使用方法   aac   事務   span   

在實際開發中,其實很少會用到事務,一般情況下事務用的比較多的是在金錢計算方面。

mybatis與spring整合後,其事務該怎麼做?其實很簡單,直接在上一節代碼的基礎上在相應的方法(通常是service層)上加上@Transactional註解即可。

1、com.xxx.firstboot.exception.UserException

package com.xxx.firstboot.exception;import org.springframework.dao.DataAccessException;/** * 自訂異常,用於測試事務 */public class UserException extends DataAccessException{    private static final long serialVersionUID = 8901479830692029025L;    public UserException(String msg) {        super(msg);    }}
View Code

說明:這是一個自訂註解,繼承了DataAccessException類。

 

2、com.xxx.firstboot.dao.UserDao

public int insertUser(String username, String password){        return userMapper.insertUser(username, password);    }    public void testTransactional(String username){        throw new UserException("測試事務");    }
View Code

說明:該類中對於事務的測試只使用到了兩個方法,第二個方法testTransactional拋出自訂的異常。

 

3、com.xxx.firstboot.service.UserService

@Transactional2     public void testTransaction(String username, String password){3         System.out.println(userDao.insertUser(username, password));4         userDao.testTransactional(username);5     }
View Code

說明:在該方法中調用了上述的userDao的兩個方法。

第一個方法向資料庫插入一條資料,第二個方法拋出我們的自訂異常,如果事務配置成功,那麼第一個方法插入資料庫會復原,否則,插入資料成功。

 

4、com.xxx.firstboot.controller.UserController

@ApiOperation("測試事務")    @ApiImplicitParams({        @ApiImplicitParam(paramType="query",name="username",dataType="String",required=true,value="使用者的姓名",defaultValue="zhaojigang"),        @ApiImplicitParam(paramType="query",name="password",dataType="String",required=true,value="使用者的密碼",defaultValue="wangna")    })    @ApiResponses({        @ApiResponse(code=400,message="請求參數沒填好"),        @ApiResponse(code=404,message="請求路徑沒有或頁面跳轉路徑不對")    })    @RequestMapping(value="/testTransaction",method=RequestMethod.GET)    public void testTransaction(@RequestParam("username") String username,                                    @RequestParam("password") String password) {       userService.testTransaction(username, password);    }
View Code

測試:

使用maven命令啟動服務-->swagger運行URL-->查看資料庫是否插入成功

 

疑問:查了很多資料,mybatis與springboot整合後(資料來源採用了druid),為了添加事務,很多人會在上一節的MyBatisConfig這個類中做兩件事請

  • 在MyBatisConfig類上添加@EnableTransactionManagement註解,該註解啟用了註解式交易管理 <tx:annotation-driven />,這樣在方法上的@Transactional註解就起作用了,但是實際測試中不加這句,@Transactional註解依然有用
  • 在MyBatisConfig類中添加了擷取交易管理員的方法
/**2      * 配置交易管理員3      */4     @Bean5     @Primary6     public DataSourceTransactionManager transactionManager() throws Exception{7         return new DataSourceTransactionManager(getDataSource());8     }
View Code

添加這句的作用:在使用@Transactional註解的地方使用方法中的交易管理員進行交易管理。

第六章 springboot + 事務

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.