亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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事務管理的資料請關注腳本之家其它相關文章!

相關文章

  • SpringBoot 中html的頁面間跳轉問題小結

    SpringBoot 中html的頁面間跳轉問題小結

    這篇文章主要介紹了SpringBoot 中html的頁面間跳轉問題小結,本文給大家分享兩種方法,結合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-10-10
  • 你要知道IDEA的這些必備插件

    你要知道IDEA的這些必備插件

    這篇文章主要介紹了你要知道IDEA的這些必備插件,文中有非常詳細的圖文示例及代碼,對正在使用IDEA的小伙伴們有很好的幫助喲,需要的朋友可以參考下
    2021-05-05
  • SpringBoot實現郵件發(fā)送的示例代碼

    SpringBoot實現郵件發(fā)送的示例代碼

    電子郵件是—種用電子手段提供信息交換的通信方式,是互聯網應用最廣的服務。本文詳細為大家介紹了SpringBoot實現發(fā)送電子郵件功能的示例代碼,需要的可以參考一下
    2022-04-04
  • Mybatis Plus插件三種方式的逆向工程的使用

    Mybatis Plus插件三種方式的逆向工程的使用

    這篇文章主要介紹了Mybatis Plus插件三種方式的逆向工程的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • idea不能自動補全yml配置文件的原因分析

    idea不能自動補全yml配置文件的原因分析

    這篇文章主要介紹了idea不能自動補全yml配置文件的原因,通過添加yml文件為配置文件能夠很快的解決,具體解決步驟跟隨小編一起通過本文學習下吧
    2021-06-06
  • 200行java代碼實現2048小游戲

    200行java代碼實現2048小游戲

    這篇文章主要為大家詳細介紹了200行java代碼實現2048小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • SpringCloud將Nacos作為配置中心實現流程詳解

    SpringCloud將Nacos作為配置中心實現流程詳解

    這篇文章主要介紹了Springcloud中的Nacos Config服務配置,本文以用戶微服務為例,進行統(tǒng)一的配置,結合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-10-10
  • java實現微博后臺登錄發(fā)送微博

    java實現微博后臺登錄發(fā)送微博

    這篇文章主要為大家詳細介紹了java實現微博后臺登錄發(fā)送微博的相關資料,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Java實現雙端鏈表LinkedList

    Java實現雙端鏈表LinkedList

    本文主要介紹了Java實現雙端鏈表LinkedList,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • 詳解MyBatis直接執(zhí)行SQL查詢及數據批量插入

    詳解MyBatis直接執(zhí)行SQL查詢及數據批量插入

    這篇文章主要介紹了MyBatis直接執(zhí)行SQL查詢及數據批量插入的相關知識,需要的朋友一起學習吧
    2016-01-01

最新評論