国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

Spring如何基于xml實(shí)現(xiàn)聲明式事務(wù)控制

瀏覽:29日期:2023-08-10 10:26:21

一、pom.xml

<?xml version='1.0' encoding='UTF-8'?><project xmlns='http://maven.apache.org/POM/4.0.0' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd'> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>A02spring</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <!--https://mvnrepository.com/artifact/org.springframework/spring-context--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.8.RELEASE</version> </dependency> <!--https://mvnrepository.com/artifact/org.springframework/spring-context--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.8.RELEASE</version> </dependency> <!--https://mvnrepository.com/artifact/org.springframework/spring-context--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>5.2.8.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.6</version> </dependency> <!--https://mvnrepository.com/artifact/org.springframework/spring-context--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.11</version> </dependency> <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-test --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.2.8.RELEASE</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/junit/junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration> <source>1.8</source> <target>1.8</target></configuration> </plugin> </plugins> </build></project>

二、spring的xml配置文件

<?xml version='1.0' encoding='UTF-8'?><beans xmlns='http://www.springframework.org/schema/beans' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:aop='http://www.springframework.org/schema/aop' xmlns:tx='http://www.springframework.org/schema/tx' xsi:schemaLocation=' http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx https://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd'> <bean class='com.wuxi.services.impl.AccountServiceImpl'> <property name='accountDao' ref='accountDao'></property> </bean> <bean class='com.wuxi.daos.impl.AccountDaoImpl'> <property name='dataSource' ref='dataSource'></property> </bean> <bean class='org.springframework.jdbc.datasource.DriverManagerDataSource'> <property name='driverClassName' value='com.mysql.cj.jdbc.Driver'></property> <property name='url' value='jdbc:mysql://192.168.2.105:3306/ssm?characterEncoding=utf8&useSSL=false'></property> <property name='username' value='root'></property> <property name='password' value='123456'></property> </bean><!--spring中基于xml的聲明式事務(wù)控制配置步驟 1、配置事務(wù)管理器 2、配置事務(wù)的通知 3、配置aop中的通用切入點(diǎn)表達(dá)式 4、建立事務(wù)通知和切入點(diǎn)表達(dá)式的對應(yīng)關(guān)系 5、配置事務(wù)的屬性--> <!--事務(wù)管理器--> <bean class='org.springframework.jdbc.datasource.DataSourceTransactionManager'> <property name='dataSource' ref='dataSource'></property> </bean> <!--事務(wù)的通知--> <tx:advice transaction-manager='transactionManager'> <!-- 事務(wù)的屬性 isolation:用于指定事務(wù)的隔離級別。默認(rèn)值是DEFAULE,表示使用數(shù)據(jù)庫的默認(rèn)隔離級別。 propagation:用于指定事務(wù)的傳播行為。默認(rèn)值是REQUIRED,表示一定會有事務(wù),增刪改的選擇。查詢方法可以選擇SUPPORTYS。 read-only:用于指定事務(wù)是否只讀。只有查詢方法才能設(shè)置為true。默認(rèn)值是false,表示讀寫。 timeout:用于指定事務(wù)的超時時間,默認(rèn)值是-1,表示永不超時,如果指定了數(shù)值,以秒為單位。 rollback-for:用于指定一個異常,當(dāng)產(chǎn)生該異常時,事務(wù)回滾,產(chǎn)生其他異常時,事務(wù)不回滾。沒有默認(rèn)值。表示任何異常都回滾。 no-rollback-for:用于指定一個異常,當(dāng)產(chǎn)生該異常時,事務(wù)不回滾,產(chǎn)生其他異常時事務(wù)回滾。沒有默認(rèn)值。表示任何異常都回滾。 --> <tx:attributes> <tx:method name='*' propagation='REQUIRED' read-only='false'/> <tx:method name='find*' propagation='SUPPORTS' read-only='true'/> </tx:attributes> </tx:advice> <aop:config> <!--切入點(diǎn)表達(dá)式--> <aop:pointcut expression='execution(* com.wuxi.services.*.*(..))'/> <!--切入點(diǎn)表達(dá)式和事務(wù)通知的對應(yīng)關(guān)系--> <aop:advisor advice-ref='txAdvice' pointcut-ref='ptc'></aop:advisor> </aop:config></beans>

三、實(shí)體類

package com.wuxi.beans;import lombok.Data;import java.io.Serializable;@Datapublic class Account implements Serializable { private Integer id; private String name; private Float money;}

四、dao

1、接口

package com.wuxi.daos;import com.wuxi.beans.Account;public interface AccountDao { Account findAccountById(Integer accountId); Account findAccountByName(String accountName); void updateAccount(Account account);}

2、實(shí)現(xiàn)類

package com.wuxi.daos.impl;import com.wuxi.beans.Account;import com.wuxi.daos.AccountDao;import org.springframework.jdbc.core.BeanPropertyRowMapper;import org.springframework.jdbc.core.support.JdbcDaoSupport;import java.util.List;public class AccountDaoImpl extends JdbcDaoSupport implements AccountDao { @Override public Account findAccountById(Integer accountId) { List<Account> accounts = getJdbcTemplate().query('select * from account where id = ?', new BeanPropertyRowMapper<Account>(Account.class), accountId); return accounts.isEmpty() ? null : accounts.get(0); } @Override public Account findAccountByName(String accountName) { List<Account> accounts = getJdbcTemplate().query('select * from account where name = ?', new BeanPropertyRowMapper<Account>(Account.class), accountName); if (accounts.isEmpty()) { return null; } if (accounts.size() > 1) { throw new RuntimeException('結(jié)果集不唯一'); } return accounts.get(0); } @Override public void updateAccount(Account account) { getJdbcTemplate().update('update account set name=?,money=? where id=?', account.getName(), account.getMoney(), account.getId()); }}

五、service

1、接口

package com.wuxi.services;import com.wuxi.beans.Account;public interface AccountService { Account findAccounById(Integer accountId); void transfer(String sourceName, String targetName, Float money);}

2、實(shí)現(xiàn)類

package com.wuxi.services.impl;import com.wuxi.beans.Account;import com.wuxi.daos.AccountDao;import com.wuxi.services.AccountService;public class AccountServiceImpl implements AccountService { private AccountDao accountDao; public void setAccountDao(AccountDao accountDao) { this.accountDao = accountDao; } @Override public Account findAccounById(Integer accountId) { return accountDao.findAccountById(accountId); } @Override public void transfer(String sourceName, String targetName, Float money) { Account source = accountDao.findAccountByName(sourceName); Account target = accountDao.findAccountByName(targetName); source.setMoney(source.getMoney() - money); target.setMoney(target.getMoney() + money); accountDao.updateAccount(source); int i = 1 / 0; accountDao.updateAccount(target); }}

六、測試

package com.wuxi.tests;import com.wuxi.services.AccountService;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = 'classpath:application.xml')public class MySpringTest { @Autowired private AccountService as; @Test public void testTransfer() { as.transfer('aaa', 'bbb', 100f); }}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 99精品一区二区三区 | 精品国产欧美一区二区最新 | 神马最新午夜限制片 | 91无毒不卡 | 日韩三级影院 | 亚洲欧美一区二区三区 | 911国产自产精选 | 九九综合| 怡红院在线a男人的天堂 | 欧美特黄一级视频 | 久久久久久免费视频 | 天天夜夜久久 | 精品国产美女福到在线不卡f | 中国日本高清免费视频网 | 韩国一级特黄毛片大 | 91成人在线免费观看 | 毛片1级| 人成在线免费视频 | 成人午夜亚洲影视在线观看 | 日韩一区二区三区在线视频 | 欧美日韩一区二区高清视 | 黄色三级日韩 | 亚洲欧美一区二区三区孕妇 | 欧美精品免费在线 | 国产在线观看精品香蕉v区 国产在线观看免费人成小说 | 成年大片免费视频播放二级 | 欧美顶级毛片在线播放小说 | a毛片免费在线观看 | 九九精品视频一区在线 | 日韩亚洲欧美在线 | 免费观看一级成人毛片 | 色综合久久加勒比高清88 | 国产成在线观看免费视频成本人 | 亚洲天堂久久久 | 国产萌白酱在线一区二区 | 久久成人精品 | 日韩欧美一区二区三区在线观看 | 精品国产香蕉在线播出 | 久久毛片免费看 | 亚洲国产精品二区久久 | 中文成人在线视频 |