最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring AOP事務管理的示例詳解

 更新時間:2022年06月20日 08:29:10   作者:倔強的牛角  
這篇文章將通過轉賬案例為大家詳細介紹一下Spring AOP是如何進行事務管理的,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下

轉賬案例-環(huán)境搭建

步驟1:準備數(shù)據(jù)庫表

之前我們在整合Mybatis的時候已經(jīng)創(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:根據(jù)表創(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接口和實現(xiàn)類

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。

這是正常情況下的運行結果,但是如果在轉賬的過程中出現(xiàn)了異常,如:

@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事務管理的示例詳解的詳細內(nèi)容,更多關于Spring AOP事務管理的資料請關注腳本之家其它相關文章!

相關文章

  • Java中Arrays類與Math類詳解

    Java中Arrays類與Math類詳解

    這篇文章主要介紹了Java中Arrays類與Math類,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • 詳解Java的內(nèi)置異常以及創(chuàng)建自定義異常子類的方法

    詳解Java的內(nèi)置異常以及創(chuàng)建自定義異常子類的方法

    這篇文章主要介紹了詳解Java的內(nèi)置異常以及創(chuàng)建自定義異常子類的方法,是Java入門學習中的基礎知識,需要的朋友可以參考下
    2015-09-09
  • Java實現(xiàn)調(diào)用ElasticSearch?API的示例詳解

    Java實現(xiàn)調(diào)用ElasticSearch?API的示例詳解

    這篇文章主要為大家詳細介紹了Java調(diào)用ElasticSearch?API的效果資料,文中的示例代碼講解詳細,具有一定的參考價值,感興趣的可以了解一下
    2023-03-03
  • SpringBoot使用Redis的zset統(tǒng)計在線用戶信息

    SpringBoot使用Redis的zset統(tǒng)計在線用戶信息

    這篇文章主要介紹了SpringBoot使用Redis的zset統(tǒng)計在線用戶信息,幫助大家更好的理解和學習使用SpringBoot框架,感興趣的朋友可以了解下
    2021-04-04
  • java銀行管理系統(tǒng)源碼

    java銀行管理系統(tǒng)源碼

    這篇文章主要為大家詳細介紹了java銀行管理系統(tǒng)源碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • springboot集成mybatisplus的詳細步驟

    springboot集成mybatisplus的詳細步驟

    MyBatis-Plus (opens new window)(簡稱 MP)是一個 MyBatis (opens new window)的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發(fā)、提高效率而生,這篇文章主要介紹了springboot四步集成mybatisplus,需要的朋友可以參考下
    2022-10-10
  • Springboot啟動原理和自動配置原理解析

    Springboot啟動原理和自動配置原理解析

    這篇文章主要介紹了Springboot啟動原理和自動配置原理解析,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • Java實現(xiàn)藍橋杯G將軍的示例代碼

    Java實現(xiàn)藍橋杯G將軍的示例代碼

    這篇文章主要介紹了Java實現(xiàn)藍橋杯G將軍的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • MyBatis關于二級緩存問題

    MyBatis關于二級緩存問題

    本篇文章主要介紹了MyBatis關于二級緩存問題,二級緩存是Mapper級別的緩存,多個sqlSession操作同一個Mapper,其二級緩存是可以共享的。
    2017-03-03
  • Java設置JSON字符串參數(shù)編碼的示例詳解

    Java設置JSON字符串參數(shù)編碼的示例詳解

    在Java中創(chuàng)建JSON字符串,我們可以使用多個庫,其中最流行的是Jackson、Gson和org.json,,下面給大家分享Java設置JSON字符串參數(shù)編碼的示例,感興趣的朋友一起看看吧
    2024-06-06

最新評論

和林格尔县| 湘阴县| 余干县| 囊谦县| 镇巴县| 承德县| 于都县| 襄垣县| 镇巴县| 南充市| 芜湖市| 北川| 信阳市| 星子县| 柏乡县| 渝中区| 集安市| 萨嘎县| 滦南县| 池州市| 渝北区| 班戈县| 遂昌县| 枣庄市| 钟祥市| 贵港市| 保山市| 临猗县| 乌审旗| 石河子市| 宝山区| 浦东新区| 富阳市| 哈尔滨市| 荆州市| 桂林市| 祁门县| 蒙城县| 柯坪县| 许昌县| 东宁县|