/*
用数组接收前台发送过来的角色表单数据 controller
*/
@RequestMapping("/save")
public String save(User user,long[] roleIds) {
userService.save(user, roleIds);
return "redirect:/user/list";
}
这是userdaoImpl
@Override
public Long save(final User user) {
final String saveUserSql = "insert into sys_user values(语句没问题,测试过 )";
// 创建PreparedStatementCreator
PreparedStatementCreator preparedStatementCreator = new PreparedStatementCreator() {
// 使用原始的jdbc完成PreparedStatement的组建
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
// PreparedStatement.RETURN_GENERATED_KEYS代表自动生成主键
PreparedStatement preparedStatement = connection.prepareStatement(saveUserSql, PreparedStatement.RETURN_GENERATED_KEYS);
preparedStatement.setObject(1, null);
preparedStatement.setObject(2, user.getUserName());
preparedStatement.setObject(3, user.getEmail());
preparedStatement.setObject(4, user.getPassword());
preparedStatement.setObject(5, user.getPhoneNum());
return preparedStatement;
}
};
// 通过该对象获得生成的主键
GeneratedKeyHolder generatedKeyHolder = new GeneratedKeyHolder();
Long userId = null;
try {
//将用户信息存储到表中
jdbcTemplate.update(preparedStatementCreator, generatedKeyHolder);
userId = generatedKeyHolder.getKey().longValue();
} catch (Exception e) {
e.printStackTrace();
}
return userId;
}
/*
将存完后自动生成的ID直接返回给Service,再执行 用户—角色表进行存储
*/
@Override
public void saveUserAndRole(long userId, long[] roleIds) {
for (Long roleId : roleIds) {
jdbcTemplate.update("insert into sys_user_role values(?,?)", userId, roleId);
}
}
这是servicesImpl
/*
既要新建用户信息,也要建立用户与角色关系信息,要对两张表操作
*/
@Override
public void save(User user, long[] roleIds) {
//第一次先添加sys_user
Long userId = userDao.save(user);
//第二次添加sys_user_role
userDao.saveUserAndRole(userId,roleIds);
}
java.lang.NullPointerException
com.chinasofti.dao.impl.UserDaoImpl.saveUserAndRole(UserDaoImpl.java:80)
com.chinasofti.service.impl.UserServiceImpl.save(UserServiceImpl.java:64)
com.chinasofti.controller.UserController.save(UserController.java:75)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:498)
org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209)
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:877)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:783)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:877)
javax.servlet.http.HttpServlet.service(HttpServlet.java:681)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851)
javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
com.chinasofti.dao.impl.UserDaoImpl.saveUserAndRole(UserDaoImpl.java:80)
我们看到,第80行出现了空指针,但是你的代码里面看不出哪一行出现的,截图的时候全一点