dao层:注意BookShopDao在xml中bean的配置方式,需要有setter方法
package cn.sdut.xml;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
public class BookShopDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
//返回图书的价格
public double getPrice(String isbn) {
String sql = "select price from book where isbn=?";
Double price = jdbcTemplate.queryForObject(sql, Double.class,isbn);
return price;
}
//更新图书库存
public void updateBookStock(String isbn) {
String sql = "update book_stock set stock=stock-1 where isbn=?";
jdbcTemplate.update(sql, isbn);
}
//更新用户账户余额
public void updateAccount(double price, int id ) {
String sql = "update account set balance=balance-? where id=?";
jdbcTemplate.update(sql, price, id);
}
}
service层
package cn.sdut.xml;
import org.springframework.beans.factory.annotation.Autowired;
public class BookShopXMLService {
@Autowired
private BookShopDao bookShopDao;
public void setBookShopDao(BookShopDao bookShopDao) {
this.bookShopDao = bookShopDao;
}
public void purchase(String isbn, int id) {
//先更新库存
System.out.println(isbn);
bookShopDao.updateBookStock(isbn);
int x = 1/0;
//更新账户余额
double price = bookShopDao.getPrice(isbn);
bookShopDao.updateAccount(price, id);
}
}
applicationContext.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:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
<!-- 配置Bean -->
<bean id="bookShopDao" class="cn.sdut.xml.BookShopDao">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
<bean id="bookShopXMLService" class="cn.sdut.xml.BookShopXMLService">
<property name="bookShopDao" ref="bookShopDao"></property>
</bean>
<!-- 导入外部属性文件 -->
<context:property-placeholder location="classpath:db.properties"/>
<!-- 数据库连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<!-- 配置jdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 配置事务通知 -->
<tx:advice id="txAdvice">
<!-- 配置要添加事务的方法 -->
<tx:attributes>
<!-- 给purchase方法添加事务 -->
<tx:method name="purchase" propagation="REQUIRED" isolation="READ_COMMITTED"/>
</tx:attributes>
</tx:advice>
<!-- 配置AOP -->
<aop:config>
<!-- 配置切入点表达式 -->
<aop:pointcut expression="execution(* cn.sdut.xml.BookShopXMLService.*(..))" id="pointcut"/>
<!-- 将事务通知和切入点表达式关联起来 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/>
</aop:config>
</beans>