mybatis-spring集成遇到问题

之前照着网上资料,自己集成没出过什么问题,结果今天启动不起来,(之前其实也出过这个问题,CLEAN一下好了就没太在意)今天一直报错ClassNotFound,先上代码

		
		
		
	
	
	
	
		
		 
	

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

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

 
       
       
    

这样数量少的话,还好说,多了就麻烦。再说有自动化的,谁还想去用手动的呢。。。所以,为了不这么麻烦,我们可以通过配置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)


你可能感兴趣的:(其他)