日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Spring如何基于xml實現聲明式事務控制

瀏覽:136日期: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的聲明式事務控制配置步驟 1、配置事務管理器 2、配置事務的通知 3、配置aop中的通用切入點表達式 4、建立事務通知和切入點表達式的對應關系 5、配置事務的屬性--> <!--事務管理器--> <bean class='org.springframework.jdbc.datasource.DataSourceTransactionManager'> <property name='dataSource' ref='dataSource'></property> </bean> <!--事務的通知--> <tx:advice transaction-manager='transactionManager'> <!-- 事務的屬性 isolation:用于指定事務的隔離級別。默認值是DEFAULE,表示使用數據庫的默認隔離級別。 propagation:用于指定事務的傳播行為。默認值是REQUIRED,表示一定會有事務,增刪改的選擇。查詢方法可以選擇SUPPORTYS。 read-only:用于指定事務是否只讀。只有查詢方法才能設置為true。默認值是false,表示讀寫。 timeout:用于指定事務的超時時間,默認值是-1,表示永不超時,如果指定了數值,以秒為單位。 rollback-for:用于指定一個異常,當產生該異常時,事務回滾,產生其他異常時,事務不回滾。沒有默認值。表示任何異常都回滾。 no-rollback-for:用于指定一個異常,當產生該異常時,事務不回滾,產生其他異常時事務回滾。沒有默認值。表示任何異常都回滾。 --> <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> <!--切入點表達式--> <aop:pointcut expression='execution(* com.wuxi.services.*.*(..))'/> <!--切入點表達式和事務通知的對應關系--> <aop:advisor advice-ref='txAdvice' pointcut-ref='ptc'></aop:advisor> </aop:config></beans>

三、實體類

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、實現類

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('結果集不唯一'); } 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、實現類

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); }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
神马午夜久久| 国产一区二区久久久久| 免费不卡在线视频| 亚洲第一精品影视| 欧美搞黄网站| 日韩不卡视频在线观看| 久久精品午夜| 亚洲www啪成人一区二区| 欧美精品日日操| 极品日韩av| 欧美午夜精彩| 国产中文字幕一区二区三区| 欧美黄色一区| 国产欧美高清视频在线| 欧美中文高清| 国产精品高清一区二区| 精品国产欧美日韩一区二区三区| 久久伊人国产| 亚洲网站视频| 亚洲一二av| 精品久久久久中文字幕小说| 国产专区一区| 日本精品久久| 国产精品91一区二区三区| 久久精品影视| 奶水喷射视频一区| 国产区精品区| 欧美日韩免费观看一区=区三区| 欧美亚洲网站| 国产精品日韩欧美一区| 久久亚洲人体| 97精品国产99久久久久久免费| 日韩久久电影| 国产精品久久久久久av公交车| 好看的av在线不卡观看| 国产中文字幕一区二区三区| 丝袜美腿诱惑一区二区三区| 日韩国产一区二| 久久精品亚洲欧美日韩精品中文字幕| 99国产精品视频免费观看一公开 | 欧美一级鲁丝片| 国产精品永久| 国产欧美一区二区色老头| 欧美日韩a区| 亚洲电影有码| 日韩精品一区二区三区免费视频| 91久久亚洲| 久久国产精品久久久久久电车| 亚洲丝袜啪啪| 国产精品成人国产| 国产suv精品一区| 国产精品高颜值在线观看| 午夜久久一区| 成人黄色av| 伊人久久成人| 久久精品免费看| 五月婷婷亚洲| 精品久久91| 日本99精品| 久久国产视频网| 国产亚洲字幕| 亚洲高清毛片| 快she精品国产999| 亚洲日产国产精品| 亚洲一区欧美激情| 免费av一区| 久久在线免费| 99久久久久国产精品| 久久夜色精品| 欧美一区二区三区激情视频| 999在线观看精品免费不卡网站| 欧美一区二区三区激情视频 | 麻豆久久一区| 黄色欧美在线| 每日更新成人在线视频| 国产精品三级| 精品日韩毛片| 国产一区二区三区精品在线观看| 四虎成人av| 成人一二三区| 美女久久网站| 亚洲婷婷丁香| 三级在线看中文字幕完整版| 亚洲国产福利| 91精品精品| 国产精品nxnn| 日韩av资源网| 青青草91视频| 在线精品亚洲| 9色国产精品| 国产字幕视频一区二区| 国产精品高颜值在线观看| 日韩精品免费一区二区在线观看| 国产在线|日韩| 欧美美女一区| 国产在线欧美| 国产99久久久国产精品成人免费| 日韩专区在线视频| 日韩视频网站在线观看| 久久一区精品| 日韩欧美一区二区三区在线视频 | 国产日韩欧美一区二区三区在线观看| 国产一区二区三区四区大秀| 亚洲欧美网站在线观看| 欧美日韩高清| 18国产精品| 蜜臀av一区二区在线免费观看| 久久精品高清| 精品91久久久久| 人人精品人人爱| 国产精品1区| 免费亚洲一区| 精品视频97| 精品视频在线观看网站| 蜜臀精品一区二区三区在线观看| 日韩在线观看一区二区| 久久99偷拍| 日韩欧美一区免费| 视频在线观看一区| 欧美另类中文字幕| 亚洲有吗中文字幕| 日韩精品视频一区二区三区| 日韩在线a电影| 亚洲+小说+欧美+激情+另类| 日韩中文字幕一区二区三区| 亚洲天堂久久| 极品日韩av| 日本在线不卡视频一二三区| 久久一区亚洲| 欧美综合二区| 免费精品视频| 日本高清不卡一区二区三区视频| 日韩一区二区久久| 麻豆视频一区| 美女国产精品久久久| 日韩av在线播放网址| zzzwww在线看片免费| 午夜久久影院| 国产一区二区三区黄网站| 国产精品日韩| 国产传媒在线观看| 青青青国产精品| 91精品国产成人观看| 欧美日韩一区自拍| 国产一区亚洲| 欧美日韩国产亚洲一区| 亚洲精品免费观看| 午夜欧美巨大性欧美巨大| 日韩午夜精品| 亚洲一区二区三区高清不卡| 国产一区三区在线播放| 日本久久一区| 91欧美精品| 女同性一区二区三区人了人一| 香蕉久久久久久久av网站| 乱一区二区av| 久久久久久久欧美精品| 日韩在线精品| 久久久亚洲一区| 日本在线成人| 精品免费视频| 中文字幕色婷婷在线视频| 国产精品欧美在线观看| 天堂网在线观看国产精品| 中文在线а√天堂| 日韩成人精品一区| 久久久久免费av| 欧美久久亚洲| 国产精品1luya在线播放| 精品国产一区二| 亚洲毛片在线免费| 欧美激情视频一区二区三区免费| 亚洲精品美女91| 91看片一区| 日本少妇一区| 日韩在线播放一区二区| 亚洲理论在线| 日韩精品亚洲一区二区三区免费| 欧美+亚洲+精品+三区| 丝瓜av网站精品一区二区| 亚洲精品免费观看| 国产亚洲综合精品| 精品五月天堂| 久久久久免费| 精品亚洲免a| 亚洲视频播放| 日韩不卡在线观看日韩不卡视频| 亚洲精品九九| 精品国产亚洲日本| 日韩欧美一区二区三区在线观看 | 日韩欧美二区| 亚洲一区二区三区四区五区午夜| 欧美1区2区3| 亚洲欧洲一区二区天堂久久| 日韩一区自拍| 麻豆国产91在线播放| 久久精品国内一区二区三区水蜜桃| 亚洲欧美日韩在线观看a三区| 国产精品一区二区三区四区在线观看| 999精品一区|