程序无报错,但是无法修改数据库数据
控制台信息如下:
八月 11, 2018 1:02:38 下午 org.springframework.test.context.TestContextManager retrieveTestExecutionListeners
信息: Could not instantiate TestExecutionListener class [org.springframework.test.context.web.ServletTestExecutionListener]. Specify custom listener classes or make the default listener classes (and their dependencies) available.
八月 11, 2018 1:02:38 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [spring-service1.xml]
八月 11, 2018 1:02:38 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [spring-dao.xml]
八月 11, 2018 1:02:38 下午 org.springframework.context.support.GenericApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.GenericApplicationContext@357246de: startup date [Sat Aug 11 13:02:38 CST 2018]; root of context hierarchy
八月 11, 2018 1:02:38 下午 org.springframework.jdbc.datasource.DriverManagerDataSource setDriverClassName
信息: Loaded JDBC driver: com.mysql.jdbc.Driver
八月 11, 2018 1:02:38 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml]
八月 11, 2018 1:02:39 下午 org.springframework.jdbc.support.SQLErrorCodesFactory <init>
信息: SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]
Process finished with exit code 0
测试代码如下:package com.imooc.os.service;
import com.imooc.os.entity.Order;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring-service1.xml")
public class OrderTest {
//因为业务的主体逻辑都在service层
@Autowired
private OrderService orderService;
@Test
public void testAddOrder(){
//首先生成一个新的订单
//订单信息根据顺序填写
Order order=new Order("100006","100002",2,1799,"","","");
//直接调用业务方法,将上面修改得东西传递进去
orderService.addOrder(order);
}
}
实现类如下:
package com.imooc.os.service.impl1;
import com.imooc.os.dao.OrderDao;
import com.imooc.os.dao.ProductDao;
import com.imooc.os.entity.Order;
import com.imooc.os.entity.Product;
import com.imooc.os.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import java.util.Date;
@Service
public class OrderServiceImpl implements OrderService {
/*考虑关联调用的对象,并且自动注入,也就是说需要再xml中配置*/
@Autowired
private OrderDao orderDao;/*需要对订单表进行增删改查*/
@Autowired
private ProductDao productDao;/*因为订单和商品关联*/
/*还需要事务定义和事务管理器*/
/*事务管理器*/
@Autowired
private PlatformTransactionManager platformTransactionManager;
/*事务定义*/
@Autowired
private TransactionDefinition transactionDefinition;
/*添加订单的业务功能*/
public void addOrder(Order order) {
/*这里的Order方法来自于实现类实现接口,
接口中注入的entity中的Order写入的方法*/
//设置订单创建时间,设置为现在
order.setCreateTime(new Date());
order.setStatus("待付款");
/*开启事务管理*/
//调用事务管理器的getTransaction,需要传入一个事务注入的对象,即定义的事务。
//返回一个订单的状态
TransactionStatus transactionStatus= platformTransactionManager.getTransaction(transactionDefinition);
try{
//调用插入的方法
orderDao.insert(order);
//订单插入之后要,需要修改product表中的记录 是根据商品的id 这个id来自于order
Product product=productDao.select(order.getProductsId());
//拿到这个商品的id之后修改它的库存数量
//这个现在商品数量等于原来商品库存减去现在订单中的数量
product.setStock(product.getStock()-order.getNumber());
//就是调用商品的数据访问层中的方法,将现在的商品库存进行更新
productDao.update(product);
//调用事务管理器,传入事务状态
platformTransactionManager.commit(transactionStatus);
}catch(Exception e){
//如果出现异常就rollback 并且传入事务状态对象
platformTransactionManager.rollback(transactionStatus);
}
}
}
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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--引入配置文件-->
<import resource="spring-dao.xml"/>
<!--开启扫描-->
<context:component-scan base-package="com.imooc.os.service.impl1"/>
<bean id="platformTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/><!--这个datasource是spring-dao中配置得-->
</bean>
<bean id="transactionDefinition" class="org.springframework.transaction.support.DefaultTransactionDefinition">
<!--一般使用默认无需配置 事务时间 隔离级别 传播行为-->
<property name="propagationBehaviorName" value="PROPAGATION_REQUIRED"/>
</bean>
</beans>
正在回答 回答被采纳积分+1
- 参与学习 人
- 提交作业 205 份
- 解答问题 4317 个
Java中非常实用的SSM整合开发内容,从Spring开始,到MyBaits的进阶内容,再到SpringMVC的应用,最后是SSM整合开发案例,逐步深入,助你成长为一名Java工程师!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星