Spring学习(十三)-事务准备
来源:互联网 发布:铁血战士知乎 编辑:程序博客网 时间:2024/06/14 05:32
1.BookShopDao.java接口类
package com.spring.tx;public interface BookShopDao { //根据书号获取书的单价 public int findBookPriceByIsbn(String isbn); //更新书的库存:使对应库存-1 public void updateBookStock(String isbn); //更新用户账户余额:使username的balance-price public void updateUserAccount(String isbn,int price);}
2.BookShopImpl.java实现类
package com.spring.tx;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.stereotype.Repository;@Repository("bookShopDao")public class BookShopImpl 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 BookStockException("库存不足"); } String sql="update book_stock set stock=stock-1 where isbn=?"; jdbcTemplate.update(sql, isbn); } @Override public void updateUserAccount(String username, int price) { //验证余额是否足够 若不足抛出异常 String sql2="select balance from account where username=?"; int balance=jdbcTemplate.queryForObject(sql2, Integer.class, username); if(balance<price) { throw new UserAccountException("余额不足"); } String sql="update account set balance=balance-? where username=?"; jdbcTemplate.update(sql, price,username); }}
3.BookShopService.java用户买书的接口
package com.spring.tx;public interface BookShopService { public void purchase(String username,String isbn);}
4.BookShopServiceImpl.java实现类
package com.spring.tx;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Service("bookShopService")public class BookShopServiceImpl implements BookShopService { @Autowired public BookShopDao bookShopDao; @Override public void purchase(String username, String isbn) { //1.获取书的单价 int price=bookShopDao.findBookPriceByIsbn(isbn); //2.更新书的库存 bookShopDao.updateBookStock(isbn); //3.更新用户余额 bookShopDao.updateUserAccount(username, price); }}
5.异常处理类包括余额不足与库存不足
package com.spring.tx;public class BookStockException extends RuntimeException { /** * */ private static final long serialVersionUID = 1L; public BookStockException() { super(); // TODO Auto-generated constructor stub } public BookStockException(String message) { super(message); // TODO Auto-generated constructor stub }}
package com.spring.tx;public class UserAccountException extends RuntimeException{ /** * */ private static final long serialVersionUID = 1L; public UserAccountException() { super(); // TODO Auto-generated constructor stub } public UserAccountException(String message) { super(message); // TODO Auto-generated constructor stub }}
6.Test实现类
package com.spring.tx;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringTransactionTest { private ApplicationContext ctx=null; private BookShopDao bookShopDao=null; private BookShopService bookShopService=null; { ctx=new ClassPathXmlApplicationContext("springXML/applicationContext.xml"); bookShopDao=ctx.getBean(BookShopDao.class); bookShopService=ctx.getBean(BookShopService.class); } @Test public void testBookShopService() { bookShopService.purchase("AA", "1001"); } @Test public void testBookShopDaoUpdateUserAccount() { bookShopDao.updateUserAccount("AA", 100); } @Test public void testBookShopDaoUpdateBookStock() { bookShopDao.updateBookStock("1001"); } @Test public void testBookShopDaoFindPriceByIsbn() { System.out.println(bookShopDao.findBookPriceByIsbn("1001")); }}
7.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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <context:component-scan base-package="com.spring"></context:component-scan> <!-- 导入资源文件 --> <context:property-placeholder location="classpath:db.properties"/> <!-- 配置C3p0数据源 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="${jdbc.driverClass}"/> <property name="jdbcUrl" value="${jdbc.jdbcUrl}"/> <property name="user" value="${jdbc.user}"/> <property name="password" value="${jdbc.password}"/> <property name="initialPoolSize" value="${jdbc.initialPoolSize}"/> <property name="minPoolSize" value="${jdbc.minPoolSize}"/> <property name="maxPoolSize" value="${jdbc.maxPoolSize}"/> </bean> <!-- 配置Spring中JdbcTemplate(Jdbc模板类) --><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/></bean><!-- 配置NameParameterJdbcTemplate该对象可以使用具名参数,其没有无参构造器,必须为其指定参数 --><bean id="nameParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate"> <constructor-arg ref="dataSource"></constructor-arg></bean> </beans>
阅读全文
0 0
- Spring学习(十三)-事务准备
- Java面试准备十三:事务
- mysql 学习记录(十三)--事务与表锁
- Spring学习(四)事务
- Spring学习(十三)Spring Bean 的命名方式介绍
- Spring学习(二十三)Spring表达式语言介绍
- Spring入门Blog[十三、Spring中Xml声明事务]
- Spring 事务学习笔记(1):事务的基本知识
- [Spring]Spring AOP学习笔记(4)--Spring 事务
- Spring学习笔记(五):数据库事务
- 【Spring应用级学习】事务(transaction)
- Spring事务学习笔记(一)
- Spring事务学习笔记(二)
- Spring事务的学习
- Spring事务学习
- Spring事务的学习
- 学习spring事务模板
- Spring事务学习
- Linux学习笔记(3)-VIM的使用
- CSU 1803:2016(数论)
- 生成函数(背包)-HDU1171
- Nosql--redis数据库
- 软件工程的设计流程
- Spring学习(十三)-事务准备
- 015讲EasyGui模块专座
- extern“C"
- Codeforces 798C:Mike and gcd problem【数论+贪心】
- POJ 1149 PIGS(网络流经典建图题)
- shua
- ES5.1.1 + kibana + x-pack + bigdesk 安装实践
- C++ Primer 第一章开始
- 物联网技术在智能医疗的应用