接口BookShopDao
public interface BookShopDao {
// 根据书号获取书的单价
public int findBookPriceByIsbn(String isbn);
//更新书的库存,使书号对应的库存减1
public void updateBookStock(String isbn);
//更新用户的账户余额,是username的blance-price
public void updaUserAccount(String usernameid,int price);
}
实现接口BookShopDao,对BookShopDao进行事务处理
@Repository("bookShopDao")
public class BookShopDaoImpl implements BookShopDao {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public int findBookPriceByIsbn(String isbn) {
// 检查书的库存是否足够,若不够,则抛出异常
String sql = "SELECT price FROM book WHERE isbn=?";
return jdbcTemplate.queryForObject(sql, Integer.class, isbn);
}
@Override
public void updateBookStock(String isbn) {
// 验证库存是否充足
String sql2 = "SELECT stock FROM book_stock WHERE isbn=?";
int stock = jdbcTemplate.queryForObject(sql2, Integer.class, isbn);
if (stock == 0) {
throw new BookStockExecption("库存不足");
}
String sql = "UPDATE book_stock SET stock=stock-1 WHERE isbn=?";
jdbcTemplate.update(sql, isbn);
}
@Override
public void updaUserAccount(String accountid, int price) {
// 验证余额是否充足
String sql2 = "SELECT balance FROM account WHERE accountid=?";
int balance = jdbcTemplate.queryForObject(sql2, Integer.class,
accountid);
if (balance < price) {
throw new UserAccountExeception("余额不足");
}
String sql = "UPDATE account SET balance =balance-? WHERE accountid=? ";
jdbcTemplate.update(sql, price, accountid);
}
}
XML配置:
<!-- 配置c3p0数据源 -->
<bean id="dataSources" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
<property name="minPoolSize" value="${jdbc.minPoolSize}"></property>
</bean>
<!-- 配置Spring的jdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSources"></property>
</bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSources"></property>
</bean>
测试类省去.....