mybatis-spring集成遇到问题

来源:互联网 发布:mac版录音 编辑:程序博客网 时间:2024/04/30 07:51
之前照着网上资料,自己集成没出过什么问题,结果今天启动不起来,(之前其实也出过这个问题,CLEAN一下好了就没太在意)今天一直报错ClassNotFound,先上代码
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="configLocation" value="classpath:Configuration.xml"/><!-- <property name="mapperLocations"><list><value>classpath*:xieguannan/store/user/dao/*-mapper.xml</value></list></property> --></bean><!-- 扫描该包下所有继承SqlMapper的接口 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="xieguannan"/><property name="markerInterface" value="xieguannan.common.dao.SqlMapper"/> </bean>

报错内容是markerInterface 需要一个Class属性,但是赋给的是一个String属性,百思不得其解啊,估摸应该就是配置问题。

网上搜索半天资料,Mybatis可以通过MapperScannerConfigurer进行匹配MapperFactoryBean,如果你不用它的话,你每次写一个Mapper,就需要在spring的配置文件里,加入下列的代码:

 <bean id="blogMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">       <property name="mapperInterface"           value="com.tiantian.mybatis.mapper.BlogMapper" />       <property name="sqlSessionFactory" ref="sqlSessionFactory" />    </bean>

这样数量少的话,还好说,多了就麻烦。再说有自动化的,谁还想去用手动的呢。。。所以,为了不这么麻烦,我们可以通过配置MapperScannerConfigurer这个bean来达到自动匹配的目的,下面我直接拷贝过来“对于MapperScannerConfigurer而言有一个属性是我们必须指定的,那就是basePackage。basePackage是用来指定Mapper接口文件所在的基包的,在这个基包或其所有子包下面的Mapper接口都将被搜索到。多个基包之间可以使用逗号或者分号进行分隔。最简单的MapperScannerConfigurer定义就是只指定一个basePackage属性,这样MapperScannerConfigurer就会扫描指定基包下面的所有接口,并把它们注册为一个个MapperFactoryBean对象。

有时候我们指定的基包下面的并不全是我们定义的Mapper接口,为此MapperScannerConfigurer还为我们提供了另外两个可以缩小搜索和注册范围的属性。一个是annotationClass,另一个是markerInterface。

  • annotationClass:当指定了annotationClass的时候,MapperScannerConfigurer将只注册使用了annotationClass注解标记的接口。
  • markerInterface:markerInterface是用于指定一个接口的,当指定了markerInterface之后,MapperScannerConfigurer将只注册继承自markerInterface的接口。

         如果上述两个属性都指定了的话,那么MapperScannerConfigurer将取它们的并集,而不是交集。即使用了annotationClass进行标记或者继承自markerInterface的接口都将被注册为一个MapperFactoryBean。”

OK,CTRL+C结束。。我这里没有试过annotationClass这个注解,应该是每个Mapper上边加个注解就可以了吧?这里重点说makerInterface,这里指定的接口,其实可以指定一个空接口,我记得在备忘录模式中,这样的接口还有个特有的名字——窄接口,代码也贴一下好了~

package xieguannan.common.dao;public interface SqlMapper {}

这里需要提一下sqlSessionFactory中的mapperLocations属性,在上边的配置中,我是注释掉了,这个属性是做什么的呢?

mapperLocations:它表示我们的Mapper文件存放的位置,当我们的Mapper文件跟对应的Mapper接口处于同一位置的时候可以不用指定该属性的值。

为了避免每次都需要指定这个东西,我们将Mapper接口和Mapper.xml文件放一个包下,就可以把它注掉了,注意这两个文件的名字除了尾缀格式不一样,其他都一样的才可以。否则在调用DAO时候会报错Invalid bound statement (not found)


0 0
原创粉丝点击