求助,springmvc和mybatis问题

rungear123 2016-07-10 03:37:29
框架新手问题,目前正在学习阶段,用的是SSM。目前正在实现一个数据库插入数据的方法,报了以下问题


[http-bio-8080-exec-3] DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory]
- Returning cached instance of singleton bean 'sqlSessionFactory'
org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [SpringMVC] in context with path [/XHL] threw exception
[Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException
at com.cn.xhl.Service.impl.UserInfoServiceImpl.insertUserInfoByPhone(UserInfoServiceImpl.java:32)
at com.cn.xhl.Controller.UserInfoController.userRegistered(UserInfoController.java:42)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker
.invokeHandlerMethod(HandlerMethodInvoker.java:175)
at org.springframework.web.servlet. mvc.annotation.AnnotationMethodHandlerAdapter
.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapte
r.handle(AnnotationMethodHandlerAdapter.java:434)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)


其中insertUserInfoByPhone方法是接口直接实现的,mybatis的mapper之前是用工具自动生成的,怕是生成的有问题我又自己写了一句测试,代码如下

<insert id="insertByPhoneNumber" parameterType="com.cn.xhl.Pojo.UserInfo" 
useGeneratedKeys="true" keyProperty="userId">
insert into tbl_user_info ( phone_number)
values (#{phoneNumber,jdbcType=VARCHAR})
</insert>


实现的方法
	@Override
public int insertUserInfoByPhone(String phoneNumber) {
int userId = 0;
UserInfo userInfo = new UserInfo();
if(phoneNumber!=null && !"".equals(phoneNumber)){
userInfo.setPhoneNumber(phoneNumber);
userId = userInfoMapper.insertSelective(userInfo);
}
else{
userId = -1;
}
return userId;
}


实在是想不到哪里出了问题,因为之前写过的一个查询方法是没问题的。现在只能猜测是Mybatis的配置写错或者是spring的配置问题,希望大神们前来解救啊。
...全文
215 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
rungear123 2016-07-14
  • 打赏
  • 举报
回复
问题找到了,是因为controller里面多new了一个接口类。 具体的原因不太清楚,因为比较着急做一个东西,所以没时间深入研究。 希望其他看到帖子的大神能给解答一下。
Lancelot228 2016-07-12
  • 打赏
  • 举报
回复
你代码贴的对么? myBatis 的配置中插入方法是insertByPhoneNumber,而你在insertUserInfoByPhone方法中调用的映射插入方法是insertSelective
Greatcqi 2016-07-11
  • 打赏
  • 举报
回复
把你的web.xml或者spring、mybatis配置贴出来看看。感觉是配置问题注入没成功
rungear123 2016-07-11
  • 打赏
  • 举报
回复
另外再补一个查询的方法,这个是没问题的。
	public UserInfo getUserInfoById(int userId) {
		return this.userInfoMapper.selectByPrimaryKey(userId);
	}
  <sql id="Base_Column_List">
    user_id, user_nick, phone_number, real_name_verified, real_name, idcard_number, sex, 
    birthday, address, head_pic, last_city, password, create_time, creator, update_time, 
    updator, state
  </sql>
  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
    select 
    <include refid="Base_Column_List" />
    from tbl_user_info
    where user_id = #{userId,jdbcType=INTEGER}
  </select>
rungear123 2016-07-11
  • 打赏
  • 举报
回复
引用 5 楼 LuShen007 的回复:
明显是#{phoneNumber,jdbcType=VARCHAR}这个没取到,注意一下dao里面的字段大小写,如果是用工具生成的话应该是小写的phonenumber。。。
应该不是这个问题吧,他自动生成的确实是有大写的。
    private String phoneNumber;
    public String getPhoneNumber() {
        return phoneNumber;
     }
    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber == null ? null : phoneNumber.trim();
     }
o_n_omika 2016-07-11
  • 打赏
  • 举报
回复
明显是#{phoneNumber,jdbcType=VARCHAR}这个没取到,注意一下dao里面的字段大小写,如果是用工具生成的话应该是小写的phonenumber。。。
rungear123 2016-07-11
  • 打赏
  • 举报
回复
Spring-mybatis的配置
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans    
                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd    
                        http://www.springframework.org/schema/context    
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd    
                        http://www.springframework.org/schema/mvc    
                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
	<context:component-scan base-package="com.cn.xhl.Controller" />
	<context:component-scan base-package="com.cn.xhl.IDao" />
	<context:component-scan base-package="com.cn.xhl.Mapping" />
	<context:component-scan base-package="com.cn.xhl.Pojo" />
	<context:component-scan base-package="com.cn.xhl.Service" />
	<context:component-scan base-package="com.cn.xhl.Service.Impl" />
	
	<bean id="propertyConfigurer"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location" value="classpath:jdbc.properties" />
	</bean>

	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="${driver}" />
		<property name="url" value="${url}" />
		<property name="username" value="${username}" />
		<property name="password" value="${password}" />
		<property name="initialSize" value="${initialSize}"></property>
		<property name="maxActive" value="${maxActive}"></property>
		<property name="maxIdle" value="${maxIdle}"></property>
		<property name="minIdle" value="${minIdle}"></property>
		<property name="maxWait" value="${maxWait}"></property>
	</bean>

	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="mapperLocations" value="classpath:com/cn/xhl/Mapping/*.xml"></property>
	</bean>

	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com/cn/xhl/IDao" />
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
	</bean>

	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>
下面是Springmvc的配置
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:mvc="http://www.springframework.org/schema/mvc"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans    
                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd    
                        http://www.springframework.org/schema/context    
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd    
                        http://www.springframework.org/schema/mvc    
                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">  
    <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->  
    <context:component-scan base-package="com.cn.xhl.Controller" /> 
    <!--避免IE执行AJAX时,返回JSON出现下载文件 -->  
    <bean id="mappingJacksonHttpMessageConverter"  
        class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">  
        <property name="supportedMediaTypes">  
            <list>  
                <value>text/html;charset=UTF-8</value>  
            </list>  
        </property>  
    </bean>  
    <!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 -->  
    <bean  
        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
        <property name="messageConverters">  
            <list>  
                <ref bean="mappingJacksonHttpMessageConverter" /> <!-- JSON转换器 -->  
            </list>  
        </property>  
    </bean>  
    <!-- 定义跳转的文件的前后缀 ,视图模式配置-->  
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
        <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 -->  
        <property name="prefix" value="/WEB-INF/jsp/" />  
        <property name="suffix" value=".jsp" />  
    </bean>  
      
    <!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 -->  
    <bean id="multipartResolver"    
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">    
        <!-- 默认编码 -->  
        <property name="defaultEncoding" value="utf-8" />    
        <!-- 文件大小最大值 -->  
        <property name="maxUploadSize" value="10485760000" />    
        <!-- 内存中的最大值 -->  
        <property name="maxInMemorySize" value="40960" />    
    </bean>   
  
</beans>
rungear123 2016-07-10
  • 打赏
  • 举报
回复
快来人啊啊啊啊啊啊啊啊
qq_19800927 2016-07-10
  • 打赏
  • 举报
回复
java.lang.NullPointerException at com.cn.xhl.Service.impl.UserInfoServiceImpl.insertUserInfoByPhone(UserInfoServiceImpl.java:32) UserInfoServiceImpl 的32行出现了空指针异常
1.系统用户: a、具有查看疾病管理功能,首页实现了所有查看疾病信息的功能。 b、具有我要求助的功能,实现了可以上报宠物,发布需要求助信息的功能。 c、具有领养宠物功能,实现了管理员将已经医治好的宠物发布上去,用户字前台可以看到待领养的宠物,用户可以申请领养宠物的功能。 2.宠物医生 a、具有待医治宠物息管理功能,宠物医生可以对待医治宠物信息进行管理。 b、具有已医治宠物功能,实现了对已经医治宠物进行查看操作。 c、具有查看领回宠物功能,实现了医护人员可以对领回宠物信息进行查看等功能操作。 3.管理员: a、具有用户信息管理功能,实现了对所有用户信息的管理操作,可以查看或删除注册用户信息。 b、具有申请管理功能,实现了对所有申请信息的管理操作,可以查看、添加或删除申请信息。 c、具有宠物信息管理功能,实现了对所有宠物信息的管理操作,可以查看或删除宠物信息。 界面美观,功能齐全,适合用作毕业设计、课程设计作业等,项目均经过测试,可快速部署运行! 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工
该资源是一个基于SSM框架(Spring、SpringMVCMyBatis)的微信互助学习小程序,前端使用Vue.js进行开发。这个小程序旨在为用户提供一个便捷的在线学习和互助平台,帮助用户提高学习效率,实现知识共享。 主要技术介绍: Spring:作为整个项目的核心框架,负责对象的创建、依赖注入等功能,简化了项目的管理和开发。 SpringMVC:作为Web层框架,负责处理用户请求,将请求分发到对应的处理器,并将处理结果返回给用户。 MyBatis:作为持久层框架,负责与数据库进行交互,实现数据的增删改查操作。 Vue.js:作为前端框架,负责页面的渲染和交互,提供了丰富的组件和API,方便开发者快速构建用户界面。 功能介绍: 用户注册与登录:用户可以在小程序中注册账号并登录,以便使用更多功能。 发布求助信息:用户可以发布自己在学习过程中遇到的问题,寻求其他用户的帮助。 回答问题:用户可以回答其他用户发布的求助信息,分享自己的知识和经验。 点赞与评论:用户可以对其他用户的回答进行点赞和评论,互动交流,提高学习氛围。 个人中心:用户可以查看自己的求助信息、回答记录等,方便管理自己的学习历程。 搜索功能:用户可以通过关键词搜索相关的求助信息,快速找到自己感兴趣的问题和答案。 总之,这个基于SSM框架的微信互助学习小程序,结合了前后端分离的开发模式,利用Vue.js构建用户界面,实现了一个功能丰富、易于使用的在线学习平台。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧