运行提示空指针异常,无法插入数据,
来源: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
已经解决了。>_<
相似问题