Spring学习(十三)-事务准备
2017-08-23 14:28
218 查看
1.BookShopDao.java接口类
2.BookShopImpl.java实现类
3.BookShopService.java用户买书的接口
4.BookShopServiceImpl.java实现类
5.异常处理类包括余额不足与库存不足
6.Test实现类
7.ApplicationContext.xml
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 } 4000 }
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>
相关文章推荐
- Spring 事务学习笔记(1):事务的基本知识
- 基于Eclipse Maven的Spring4/Spring-MVC/Hibernate4整合之十三:用Spring嵌套事务(Nested Transaction) 回滚并返回自定义Exception
- 学习Spring必学的Java基础知识(7)----事务基础知识
- Spring学习5-Spring整合JDBC及其事务处理(注解方式)
- 【Spring学习33】Spring事务(3):事务属性之隔离级别(isolation level)
- Spring的四种事务管理(一种编程式事务+三种声明事务)<学习随笔>
- Spring 事务 学习
- Spring基础学习(五)—事务管理
- Spring学习(十四)Spring中如何使用事务?
- spring学习-4-事务
- Spring学习-33:Spring中的事务管理之声明式事务(基于切面自动代理)
- Spring学习历程---Hibernate访问数据库可脱离事务管理器
- jqGrid分页技术学习(二)spring环境准备
- Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)
- Spring 学习笔记之事务管理
- 关于spring管理事务的学习总结。
- Spring学习8-Spring事务管理(编程式事务管理)
- 学习笔记:spring与hibernate整合(采用aop来管理事务来实现声明式事务)
- SpringBoot学习(六)——事务的管理
- Spring学习笔记五:Spring进行事务管理