程序无报错,但是无法修改数据库数据

程序无报错,但是无法修改数据库数据

控制台信息如下:

八月 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

登陆购买课程后可参与讨论,去登陆

1回答
提问者 尼古拉斯灵斯 2018-08-11 14:50:10

老师已经不要宝宝了呢,,呜呜呜呜。

宝宝自己解决了  呜呜呜。

宝宝好伤心 呜呜呜

如果有其他宝宝碰到这个问题  记住给catch语句e.printStackTrace();
打印下异常输出,,然后再近一步找错

我这里找到得错误是,ProductDaoImpl中得update方法下边得sql语句多写了一个2。

  • 同学能够自己解决问题,非常棒!如果有其他同学碰到类似的问题,我们会把你排查错误的方式转达给碰到类似问题的同学哒~当然同学如果在学习中遇到问题,可以在问答区进行提问,我们的老师会一直陪伴同学的成长~~ 祝学习愉快!
    2018-08-11 23:58:25
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
SSM主流框架入门与综合项目实战2018版
  • 参与学习           人
  • 提交作业       205    份
  • 解答问题       4317    个

Java中非常实用的SSM整合开发内容,从Spring开始,到MyBaits的进阶内容,再到SpringMVC的应用,最后是SSM整合开发案例,逐步深入,助你成长为一名Java工程师!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师