springMVC+Mybatis 排坑

来源:互联网 发布:知乎扒皮密子君催吐 编辑:程序博客网 时间:2024/06/13 19:32

C++程序员,因业务需要,使用java搭建服务器,考虑一番后采用springMVC+Mybatis,针对遇到的坑做下分享。


本人使用的是Intellij IDEA,MAVEN,此为背景。


1,No qualifying bean of type [***] found for dependency

首先遇到的是这个问题,按照网上说的几乎所有的解决方式都不奏效,让我深陷在@Service, @Autowired, @Repository 中不能自拔,怀疑是自己对此不够熟悉导致做了蠢操作。


后来静下心,仔细看服务启动过程,发现一个致命问题:我的 spring-mybaitis.xml 怎么没显示加载??(诸如:[org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - Loading XML bean definitions from class path resource 这种字样)


然后查看web.xml,坑爹的发现居然没真的没对它进行加载。。。

方式如下:

  <context-param>    <param-name>contextConfigLocation</param-name>    <param-value>      classpath:spring-mybatis.xml    </param-value>  </context-param>


填写后欢天喜地的重启服务,这次终于加载了! 但是,错误依旧。。

坑死若干脑细胞后,发现问题是 Mapping加载失败,加载失败的原因就是没找到。

首先mapper.xml 是存在的,并且名称和接口对应,没有问题。

其次XML文件中已经添加了

<context:component-scan
说明系统已经努力去找了,那么说明还是找的地方不对!

我将自动搜索bean的xml代码屏蔽,使用指定bean的形式试了一下:

<bean id="*Mapper" class="org.mybatis.spring.mapper.MapperFactoryBean">        <property name="mapperInterface" value="com.*.*.*Mapper" />        <property name="sqlSessionFactory" ref="sqlSessionFactory" /></bean>
成功咧。

然后查看target目录,诶?? xml居然不在!!

打包没打进去吗? 

上网搜索了一下解决办法,在pom 中增加了一段代码:

<resources>    <resource>      <directory>src/main/java</directory>      <includes>        <include>**/*.xml</include>      </includes>    </resource>    <resource>      <directory>src/main/resources</directory>      <includes>        <include>**/*.*</include>      </includes>    </resource>  </resources>

重新启动,发现xml这回有了,但是错误依旧

然后我灵机一动做了个骚操作,大功告成。。


骚操作就是改了一下component-scan的位置,我以前一直以为应该查找代码所在的目录下(dao目录),后来发现其应该查找的是mapper.xml文件,修改成mapping就OK了。


此前还一直纠结mybatis生成的mapping 该放在src下还是resource下,其实对于我来说,只要打包能打进去放哪都一样,当然前提是系统能够找到它。


2,expected single matching bean but found 2
弹出这个错误,比第一个问题好解决多了,这个是由于@XXX 用错了导致的。

为此我总结了一下:

xxxController 前加 @Controller

服务的实现前(***Impl)加 @Resource

dao中的mapper 前加 @Repository

model中的类前加 @Component

service 接口什么都不加,再Impl实现中,类前加@Service, 然后在其中需要使用的数据库Mapper对象前@Autowired





原创粉丝点击