spring-mybatis背景
其实也整合了springMVC,而且关键就在这里:在web.mxl中没有做任何配置,全部使用@Configuration注解通过Java代码完成,访问数据库之前页面是可以正常打开的。需要访问数据库的时候,参考mybatis官网对mybatis-spring进行了整合。由于感觉mybatis还是在xml文件中编写sql比较方便,好像xml配置也更加全面、容易理解。所以,选择mybatis配置文件以及映射文件都选择了xml方式而没有使用注解。链接:
mybatis指导手册
mybatis-spring
是时候启动项目啦!
轰轰轰!!!。。。。。。。
找不到sqlSession
打包完成,启动:
找不到sqlSession这个bean,我明明在mybatis配置文件中配了,beanId也没问题。我去,忘了把mybatis配置文件(spring-mybatis.xml)文件引入总的sprign配置文件(spring-all.xml)了。而且,也没有把spring-all.xml文件引入到项目中呢。
为了保持web.xml的纯洁性,我决定也通过注解来引入。网上搜了下,可以用@PropertSource注解。
通过@PropertySource引入spring配置文件
再启动,轰轰轰轰轰。。。。又爆红
这个报错一时看不出来是哪儿出了问题,百度一下,大概是XML文件的命名空间和实际配置内容对不上。
mapper.mxl文件(我命名为了:user.xml)
spring-all.xml文件:
spring-mybatis.xml文件:
类似的报错挺多的。有人说是beans配置重复了、有的是命名空间配置不对,折腾了一波,好像每个人最终解决的办法都不一样,反而更加迷惑了,他们的解释并不适合我呀。
做试验了----控制变量
既然问题是把spring-all引入之后导致的,那么可以确定问题就是spring配置文件引入、加载的过程中出问题了。目前只能一步一步缩小错误的范围了,想起在学校做实验时,控制一部分变量不变,然后改变另一部分变量,然后查看影响,从而确定变量是否影响。是时候展现真正的技术了
具体到这次“试验”:不变的是,spring-all.xml文件,变得是把它引入的项目,我这次把注解引入spring-all.mxl注释了,通过web.xml把它引入。
在web.xml中添加如下配置:
第3次启动项目,蹦,就调到了首页,燃爆了!
至此,确定配置文件没问题,而是引入方式不对。
纸上得来终觉浅
我整合springMVC是从读《Spring In Action》开始的。忽然想到,虽然书上首先推荐的就是注释配置这种放入,但是对于xml配置也有介绍的。好像还有介绍多种配置方式复用的,赶紧打开书。
果然呀!而且是在第2章,装配Bean中就说了,只是之前一直没用到,慢慢也就忘了。
使用**@ImportResource注解来引入spring配置文件。
启。。。动,还来???
大意就是:spring上下文重复了,把注解引入的删了就好了。
终于乖乖跳到首页了。
后记
刚碰到这个报错时真的好懵逼,有种无路可走的绝望,然后一顿操作猛如虎也没卵用,切记:冷静!冷静!冷静
对待bug必须像对待爱人那样温柔,还必须像对待敌人那样冰冷!