Spring事务(买股票示例)

结构图:

entity:

dao

接口:

public interface IAccountDAO {
//改变账户余额
public void UpdateAccount(int aid,int abalance,boolean isBuy);
}


public interface IStockDAO {
//改变股票股数的方法
public void updateStock(int sid,int scount,boolean isBuy);
}




实现类:
public class AccountDAOImpl extends JdbcDaoSupport implements IAccountDAO {

public void UpdateAccount(int aid, int abalance, boolean isBuy) {
String sql="";
if (isBuy){
//购买股票
sql="update account set balance=balance-? where aid=?";
}else{
//出售股票
sql="update account set balance=balance+? where aid=?";
}

int update = this.getJdbcTemplate().update(sql, abalance, aid);
}
}







public class StockDAOImpl extends JdbcDaoSupport implements IStockDAO {

public void updateStock(int sid, int scount, boolean isBuy) {
String sql="";
if (isBuy){
//购买股票
sql="update Stock set count=count+? where sid=?";
}else{
//出售股票
sql="update Stock set count=count-? where sid=?";
}

int update = this.getJdbcTemplate().update(sql,scount,sid);
}
}
 

service:

接口:

public interface IStockService {
public void buyStock(int aid,int abalance,int sid,int scount) throws StockException;
}



实现类:
public class StockServiceImpl implements IStockService{
//植入两个dao
private IStockDAO stockDAO;
private IAccountDAO accountDAO;

public void buyStock(int aid, int abalance, int sid, int scount) throws StockException {
//购买股票 买入和卖出
Boolean isBuy=true;
accountDAO.UpdateAccount(aid,abalance,isBuy);
/* int result=4/0;//运行时出错*/
if(1==1) {
throw new StockException("出异常");
}
stockDAO.updateStock(sid,scount,isBuy);
}
public IStockDAO getStockDAO() {
return stockDAO;
}

public void setStockDAO(IStockDAO stockDAO) {
this.stockDAO = stockDAO;
}

public IAccountDAO getAccountDAO() {
return accountDAO;
}

public void setAccountDAO(IAccountDAO accountDAO) {
this.accountDAO = accountDAO;
}
}




xml++++++++++++++++++++++===applocationContextday17Stock.xml:
 <!--druid-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<!--2.识别到jdbc.properties文件-->
<!--配置1:-->
<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
<!--4.DAO-->
<bean id="accountDAO" class="cn.happy.day17Account.dao.impl.AccountDAOImpl">
<property name="dataSource" ref="dataSource"></property>
</bean>
<bean id="stockDAO" class="cn.happy.day17Account.dao.impl.StockDAOImpl">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--5.service id-->
<bean id="stockService" class="cn.happy.day17Account.service.impl.StockServiceImpl">
<property name="AccountDAO" ref="accountDAO"></property>
<property name="StockDAO" ref="stockDAO"></property>
</bean>
<!--事务:事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--事务控制 事务代理工厂bean-->
<bean id="stockDAOServiceProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager"></property>
<property name="target" ref="stockService"></property>

<!--事务属性-->
<property name="transactionAttributes">
<props>
<prop key="buyStock">ISOLATION_DEFAULT,PROPAGATION_REQUIRED,-StockException</prop>
</props> </property> </bean>

测试类:
public class Test01StockAccount {
@Test
/*买股票*/
public void test01(){

ApplicationContext context=new ClassPathXmlApplicationContext("applocationContextday17Stock.xml");
IStockService service=(IStockService) context.getBean("stockDAOServiceProxy");
try{
service.buyStock(3,1000,35,10);
}catch(Exception exception){
exception.printStackTrace();
}

}

}

原文地址:https://www.cnblogs.com/yfyfyff/p/7716677.html