各位大大,谁能帮我看下我这个spring3.0 和 mybatis整合出了什么问题呀,mybatis总是行不成功,完整项目我已经放在附件中了

附件是我的项目,可以直接在eclipse中部署运行,用的mysql数据库,只需建一个test数据库就可以,建表语句在test.rar附件中,执行的service url是:http://localhost:8080/springTest/lyang/getAll.do

每次一执行就报:
java.lang.NullPointerException
at com.lyang.springTest.daoImpl.IPeopleDao.getAllPeople(IPeopleDao.java:15)
at com.lyang.springTest.service.IPeopleService.getAll(IPeopleService.java:18)
at com.lyang.springTest.controller.IPeopleController.getAll(IPeopleController.java:24)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306)
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:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:259)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:237)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:281)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)

iteye里面大神比较多,希望各位前辈能给我指点一下,弄了两晚上了,一直这个错误,不知道什么原因,如果不用注解改成xml手动注入bean的话就没有问题,一用注解配置文件里面改成自动扫描,mybatis就执行不成功了

3个回答

楼主,首先你web.xml有点问题,有个参数你配置了两遍,我改了。
然后 你最大的问题是 ,数据库session没有注入,见
spring-mybatis.xml


你把sqlSessionFactory注入给了org.mybatis.spring.SqlSessionTemplate,
而sqlSession却没有注入给你的BasicSqlSupport这个类,而BasicSqlSupport却需要给子类IPeopleDao提供sqlSession,故为空。 解决方案见下
把上面的那个删除掉,添加


然后把BasicSqlSupport 改为如下
public class BasicSqlSupport {

private SqlSessionFactory sqlSessionFactory;
public SqlSession session;

public SqlSession getSqlSession() {
    return session;
}

public void setSqlSession(SqlSession sqlSession) {
    this.session = sqlSession;
}

public SqlSessionFactory getMySqlSessionFactory() {
    return sqlSessionFactory;
}

public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
    this.sqlSessionFactory = sqlSessionFactory;
    session = sqlSessionFactory.openSession();
}

}

当然,后者我也有问题,不够简洁,所有 还可以改下,但这样至少能解决你的问题,我的结果是

1 lyang 23
2 cchuang 23
0 user0 20
1 user1 21
2 user2 22
3 user3 23
4 user4 24
5 user5 25
6 user6 26
7 user7 27
8 user8 28
9 user9 29
不知道是不是你想要的!

iteye_13813
iteye_13813 不好意思,你回复我后这个不给提示,你还是发私信吧!
5 年多之前 回复
iteye_13813
iteye_13813 出的错是什么?我这边已经跑起来了!
5 年多之前 回复
qwertyanglu
qwertyanglu 按照你最开始说的那种配置: <bean id="mySqlSessionFactory" class="com.lyang.springTest.util.BasicSqlSupport"> <property name="sqlSessionFactory" ref="sqlSessionFactory" /> </bean> 这个是可以查出来的,按道理我把sqlSession注入进去效果应该是一样的呀,但是直接注入的话,还是报之前那个错<bean id="mySqlSession" class="com.lyang.springTest.util.BasicSqlSupport"> <property name="sqlSession" ref="sqlSession" /> </bean>
5 年多之前 回复
qwertyanglu
qwertyanglu 按照你的提示,我把web.xml里面第一个配置改成: <context-param> <param-name>contextConfigLocation</param-name> <param-value><!-- Spring的配置文件 --> classpath:/config/spring.xml,classpath:/config/spring-mybatis.xml </param-value> </context-param> 然后再spring-mybatis.xml里面加上了: <bean id="mySqlSession" class="com.lyang.springTest.util.BasicSqlSupport"> <property name="session" ref="sqlSession" /> </bean> BasicSqlSupport 的代码是: public class BasicSqlSupport { protected SqlSession session; public SqlSession getSession() { return session; } public void setSession(SqlSession session) { this.session = session; } } 结果还是报错,我是有哪里没改么?
5 年多之前 回复
iteye_13813
iteye_13813 不好意思 我搞麻烦了点。sorry 刚刚spring有点忘记了。BasicSqlSupport不变,spring-mybatis.xml 里面直接加一句 <bean id="mySqlSession" class="com.lyang.springTest.util.BasicSqlSupport"> <property name="sqlSession" ref="sqlSession" /> </bean> 就OK了
5 年多之前 回复

注入存在问题,没有注入成功。这样试试
[code="java"] <!-- 自动扫描所有注解该路径 --> [/code]

各位大大,谁能帮我看下我这个spring3.0 和 mybatis整合出了什么问题呀,mybatis总是行不成功,完整项目我已经放在附件中了。

恩,我觉得,首先不是大大,你要喊大人,这里你都错了,其次spring3.0 和 mybatis整合首先你需要下载所有的夹包,所有的夹包都下载好了,你还需要尾部容器,最后你要知道你的项目到底在哪里,打成exe放进去就可以了,你zao吗?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问