运行提示空指针异常,无法插入数据,

来源:4-3 Spring事务处理-基于底层API

cloudonthesun

2019-02-10 20:56:07

报错信息:

Sun Feb 10 20:42:48 CST 2019 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

java.lang.NullPointerException

at com.imooc.os.dao.impl.OrderDaoImpl.insert(OrderDaoImpl.java:18)

at com.imooc.os.service.impl1.OrderServiceImpl.addOrder(OrderServiceImpl.java:40)

at com.imooc.os.service.OrderTest.testAddOrder(OrderTest.java:21)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:497)

at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)

at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)

at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)

at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)

at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)

at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)

at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)

at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)

at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:254)

at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89)

at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)

at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)

at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)

at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)

at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)

at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)

at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)

at org.junit.runners.ParentRunner.run(ParentRunner.java:309)

at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:193)

at org.junit.runner.JUnitCore.run(JUnitCore.java:160)

at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)

at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)

at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)

at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)


Process finished with exit code 0

OrderDaoImpl类:package com.imooc.os.dao.impl;

import com.imooc.os.dao.OrderDao;
import com.imooc.os.entity.Order;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
@Repository
public class OrderDaoImpl implements OrderDao {
   private JdbcTemplate jdbcTemplate;
   @Override
   public void insert(Order order) {
      String sql = "insert into orders values(?,?,?,?,?,?,?,?,?,?,?)";
       jdbcTemplate.update(sql,order.getId(),order.getProductsId(),order.getNumber(),order.getPrice(),order.getCreateTime(),order.getSendTime(),order.getConfirmTime(),order.getConsignee(),order.getConfigneePhone(),order.getConfigneeAddress(),order.getStatus());

   }

   @Override
   public void update(Order order) {
       String sql = "update orders set create_time=?,send_time=?,confirm_time=?,consignee=?,consignee_phone=?,consignee_address=? where id=?,products_id=?,number=?,price=?";
       jdbcTemplate.update(sql,order.getCreateTime(),order.getSendTime(),order.getConfirmTime(),order.getConsignee(),order.getConfigneePhone(),order.getConfigneeAddress(),order.getStatus(),order.getId(),order.getProductsId(),order.getNumber(),order.getPrice());
   }

   @Override
   public void delete(String id) {
       String sql = "delete from orders where id=?";
       jdbcTemplate.update(sql,id);

   }

   @Override
   public Order select(String id) {
       String sql = "select * from orders where id=?";
       return jdbcTemplate.queryForObject(sql,new OrderRowMapper(),id);
   }

   @Override
   public List<Order> select() {
       String sql = "select * from orders";
       return jdbcTemplate.query(sql,new OrderRowMapper());
   }
   private class OrderRowMapper implements RowMapper<Order> {

       @Override
       public Order mapRow(ResultSet resultSet, int i) throws SQLException {
           Order order = new Order();
          order.setId(resultSet.getString("id"));
          order.setProductsId(resultSet.getString("productsId"));
          order.setNumber(resultSet.getInt("number"));
          order.setPrice(resultSet.getDouble("price"));
          order.setCreateTime(resultSet.getDate("create_time"));
          order.setSendTime(resultSet.getDate("send_time"));
          order.setConfirmTime(resultSet.getDate("confirm_time"));
          order.setConsignee(resultSet.getString("consignee"));
          order.setConfigneePhone(resultSet.getString("consignee_phone"));
          order.setConfigneeAddress(resultSet.getString("consignee_address"));
          order.setStatus(resultSet.getString("status"));
          return order;

       }
   }
}

OrderServiceImpl类: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 {
   @Autowired
   private OrderDao orderDao;
   @Autowired
   private ProductDao productDao;//前两个在spring-dao里面配置了
   @Autowired
   private PlatformTransactionManager transactionManager;
   @Autowired
   private TransactionDefinition transactionDefinition;


   @Override
   public void addOrder(Order order) {
       //一般先进行业务规则
       order.setCreateTime(new Date());
//        order.setSendTime(new Date());
//        order.setConfirmTime(new Date());
       order.setStatus("待付款");
      // System.out.println(order);
       TransactionStatus transactionStatus = transactionManager.getTransaction(transactionDefinition);//开启事务


       try {
           orderDao.insert(order);
           Product product = productDao.select(order.getProductsId());
           product.setStock(product.getStock() - order.getNumber());
           productDao.update(product);
           transactionManager.commit(transactionStatus);
       }catch (Exception e){
           e.printStackTrace();
           transactionManager.rollback(transactionStatus);
       }




   }
}

OrderTest类: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;

import javax.annotation.Resource;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring-service1.xml")
public class OrderTest {
   @Autowired
   private OrderService orderService;
       @Test
   public void testAddOrder(){
           Order order = new Order("100006","100002",2,1799,"","","");
           System.out.println(order);
           orderService.addOrder(order);

       }

}

spring-service.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"
      xmlns:aop="http://www.springframework.org/schema/aop"
      xmlns:tx="http://www.springframework.org/schema/tx"
      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
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd">


   <import resource="spring-dao.xml"/>
   <!--自动扫描这个包下面的所有加注解的-->
   <context:component-scan base-package="com.imooc.os.service.impl1"/>
   <bean id="transactionMannger" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
       <property name="dataSource" ref="dataSource"/>
   </bean>
   <bean id="transactionDefinition" class="org.springframework.transaction.support.DefaultTransactionDefinition">
       <!--一般使用默认无需配置 事务时间 隔离级别  传播行为-->
       <property name="propagationBehaviorName" value="PROPAGATION_REQUIRED"/>
   </bean>


</beans>

提示public void insert(Order order) {
  String sql = "insert into orders values(?,?,?,?,?,?,?,?,?,?,?)";
   jdbcTemplate.update(sql,order.getId(),order.getProductsId(),order.getNumber(),order.getPrice(),order.getCreateTime(),order.getSendTime(),order.getConfirmTime(),order.getConsignee(),order.getConfigneePhone(),order.getConfigneeAddress(),order.getStatus());

}最后一个语句空指针异常,但是没有找到原因

写回答

1回答

cloudonthesun

提问者

2019-02-10

已经解决了。>_<

1

0 学习 · 4317 问题

查看课程