Spring AOP事務管理的示例詳解
更新時間:2022年06月20日 08:29:10 作者:倔強的牛角
這篇文章將通過轉賬案例為大家詳細介紹一下Spring AOP是如何進行事務管理的,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
轉賬案例-環(huán)境搭建
步驟1:準備數據庫表
之前我們在整合Mybatis的時候已經創(chuàng)建了這個表,可以直接使用
create database spring_db character set utf8; use spring_db; create table tbl_account( id int primary key auto_increment, name varchar(35), money double ); insert into tbl_account values(1,'Tom',1000); insert into tbl_account values(2,'Jerry',1000);
步驟2:創(chuàng)建項目導入jar包
項目的pom.xml添加相關依賴
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.10.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.16</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.10.RELEASE</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.2.10.RELEASE</version> </dependency> </dependencies>
步驟3:根據表創(chuàng)建模型類
public class Account implements Serializable { private Integer id; private String name; private Double money; //setter...getter...toString...方法略 }
步驟4:創(chuàng)建Dao接口
public interface AccountDao { @Update("update tbl_account set money = money + #{money} where name = #{name}") void inMoney(@Param("name") String name, @Param("money") Double money); @Update("update tbl_account set money = money - #{money} where name = #{name}") void outMoney(@Param("name") String name, @Param("money") Double money); }
步驟5:創(chuàng)建Service接口和實現類
public interface AccountService { /** * 轉賬操作 * @param out 傳出方 * @param in 轉入方 * @param money 金額 */ public void transfer(String out,String in ,Double money) ; } @Service public class AccountServiceImpl implements AccountService { @Autowired private AccountDao accountDao; public void transfer(String out,String in ,Double money) { accountDao.outMoney(out,money); accountDao.inMoney(in,money); } }
步驟6:添加jdbc.properties文件
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/spring_db?useSSL=false jdbc.username=root jdbc.password=root
步驟7:創(chuàng)建JdbcConfig配置類
public class JdbcConfig { @Value("${jdbc.driver}") private String driver; @Value("${jdbc.url}") private String url; @Value("${jdbc.username}") private String userName; @Value("${jdbc.password}") private String password; @Bean public DataSource dataSource(){ DruidDataSource ds = new DruidDataSource(); ds.setDriverClassName(driver); ds.setUrl(url); ds.setUsername(userName); ds.setPassword(password); return ds; } }
步驟8:創(chuàng)建MybatisConfig配置類
public class MybatisConfig { @Bean public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){ SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean(); ssfb.setTypeAliasesPackage("com.itheima.domain"); ssfb.setDataSource(dataSource); return ssfb; } @Bean public MapperScannerConfigurer mapperScannerConfigurer(){ MapperScannerConfigurer msc = new MapperScannerConfigurer(); msc.setBasePackage("com.itheima.dao"); return msc; } }
步驟9:創(chuàng)建SpringConfig配置類
@Configuration @ComponentScan("com.itheima") @PropertySource("classpath:jdbc.properties") @Import({JdbcConfig.class,MybatisConfig.class}) public class SpringConfig { }
步驟10:編寫測試類
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = SpringConfig.class) public class AccountServiceTest { @Autowired private AccountService accountService; @Test public void testTransfer() throws IOException { accountService.transfer("Tom","Jerry",100D); } }
事務管理
上述環(huán)境,運行單元測試類,會執(zhí)行轉賬操作,Tom
的賬戶會減少100,Jerry
的賬戶會加100。
這是正常情況下的運行結果,但是如果在轉賬的過程中出現了異常,如:
@Service public class AccountServiceImpl implements AccountService { @Autowired private AccountDao accountDao; public void transfer(String out,String in ,Double money) { accountDao.outMoney(out,money); int i = 1/0; accountDao.inMoney(in,money); } }
以上就是Spring AOP事務管理的示例詳解的詳細內容,更多關于Spring AOP事務管理的資料請關注腳本之家其它相關文章!
相關文章
詳解MyBatis直接執(zhí)行SQL查詢及數據批量插入
這篇文章主要介紹了MyBatis直接執(zhí)行SQL查詢及數據批量插入的相關知識,需要的朋友一起學習吧2016-01-01