1. Import coordinate Maven
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.8.RELEASE</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.2.RELEASE</version>
<scope>test</scope>
</dependency>
</dependencies>
2. The key Bean.xml configuration
< bean id= "accountService" class = "com.joyTop.service.impl.AccountServiceImpl" >
< property name= "accountDao" ref= "accountDao" > < / property>
< / bean>
< bean id= "accountDao" class = "com.joyTop.dao.impl.AccountDaoImpl" >
< property name= "dataSource" ref= "dataSource" > < / property>
< / bean>
< bean id= "jdbcTemloate" class = "org.springframework.jdbc.core.JdbcTemplate" >
< property name= "dataSource" ref= "dataSource" > < / property>
< / bean>
< ! -- 配置数据源 -- >
< bean id= "dataSource" class = "org.springframework.jdbc.datasource.DriverManagerDataSource" >
< property name= "driverClassName" value= "com.mysql.jdbc.Driver" > < / property>
< property name= "Url" value= "jdbc:mysql://localhost:3306/spring4_day3?characterEncoding=utf-8" > < / property>
< property name= "username" value= "root" > < / property>
< property name= "password" value= "123.com" > < / property>
< / bean>
< ! -- sprng中基于XML 的事务控制配置步骤
1. 配置事务管理器
2. 配置事务通知
此时我们需要导入事务的约束 tx名称空间和约束、同时也需要aop
使用tx: advice标签配置事务通知
属性:
id: 给事务通知启唯一ID
transaction- manager: 给事务通知提供一个事务管理器引用
3. 配置AOP 中的通用切入点表达式
4. 建立事务通知和切入点表达式的对应关系
5. 配置事务的属性
是在事务的通知tx: advice标签的内部
-- >
< bean id= "transactionManager" class = "org.springframework.jdbc.datasource.DataSourceTransactionManager" >
< property name= "dataSource" ref= "dataSource" > < / property>
< / bean>
< ! -- 配置事务通知-- >
< tx: advice id= "txAdvice" transaction- manager= "transactionManager" >
< ! -- 配置事务的属性
isolation: 用于指定事务的隔离级别,默认值是DEFAULT , 表示使用数据库的默认隔离级别
timeout: 事务超时,默认值- 1 ,表示永远不超时,如果指定了数值,以秒为单位
propagation: 用于指定事务的传播行为。默认值是REQUIRED , 表示一定会有事务,增删改的选择,查询方法可以选择SUPPORTS
read- only: 指定事务是否只读,只有查询方法才能设置为true , 默认值是false , 表示读写
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: method>
< / tx: attributes>
< / tx: advice>
< ! -- 配置AOP -- >
< aop: config>
< ! -- 配置切入点表达式-- >
< aop: pointcut id= "pt1" expression= "execution(* com.joyTop.service.impl.*.*(..))" / >
< ! -- 建立切入点表达式和事务通知的对应关系-- >
< aop: advisor advice- ref= "txAdvice" pointcut- ref= "pt1" > < / aop: advisor>
< / aop: config>
3.Dao using inheritance JdbcDaoSupport, Bean.xml in accountDao without introducing JdbcTemplate, dataSource introduced directly into the data source, dao with super.getJdbcTemplate () to get JdbcTemplate.
public class AccountDaoImpl extends JdbcDaoSupport implements IAccountDao {
public Account findAccountById ( float id) {
List< Account> list = super . getJdbcTemplate ( ) . query ( "select * from account where id = ?" , new BeanPropertyRowMapper < Account> ( Account. class ) , id) ;
return list. isEmpty ( ) ? null : list. get ( 0 ) ;
}
public Account findAccountByName ( String accountName) {
List< Account> list = super . getJdbcTemplate ( ) . query ( "select * from account where name = ?" , new BeanPropertyRowMapper < Account> ( Account. class ) , accountName) ;
if ( list. isEmpty ( ) ) {
return null ;
}
if ( list. size ( ) > 1 ) {
throw new RuntimeException ( "结果不唯一" ) ;
}
return list. get ( 0 ) ;
}
public void updateAccount ( Account account) {
super . getJdbcTemplate ( ) . update ( "update account set money=? where id=?" , account. getMoney ( ) , account. getId ( ) ) ;
}
}
4.Service business layer
public class IAccountServiceImpl implements IAccountService {
private IAccountDao accountDao;
public void setAccountDao ( IAccountDao accountDao) {
this . accountDao = accountDao;
}
public Account findAccountById ( Integer accountId) {
return accountDao. findAccountById ( accountId) ;
}
public void updateAccount ( Account account) {
accountDao. updateAccount ( account) ;
}
public void transfer ( String sourceName, String targetName, Float money) {
System. out. println ( "transfer...." ) ;
Account source = accountDao. findAccountByName ( sourceName) ;
Account target = accountDao. findAccountByName ( targetName) ;
source. setMoney ( source. getMoney ( ) - money) ;
target. setMoney ( target. getMoney ( ) + money) ;
accountDao. updateAccount ( source) ;
accountDao. updateAccount ( target) ;
}
}
The whole test spring and Junit, test annotations
@RunWith ( SpringJUnit4ClassRunner. class )
@ContextConfiguration ( locations = "classpath:bean.xml" )
public class AccountServiceTest {
@Autowired
private IAccountService as ;
@Test
public void testTransfer ( ) {
as . transfer ( "aaa" , "bbb" , 100 f) ;
}
}
6. Maven version may be imported in question did not run out, a small partner to see the problem, you can contact me, thanks.
QQ : 583083874