mybatis-spring集成遇到问题
2014-07-07 23:11
357 查看
之前照着网上资料,自己集成没出过什么问题,结果今天启动不起来,(之前其实也出过这个问题,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,这里指定的接口,其实可以指定一个空接口,我记得在备忘录模式中,这样的接口还有个特有的名字——窄接口,代码也贴一下好了~
这里需要提一下sqlSessionFactory中的mapperLocations属性,在上边的配置中,我是注释掉了,这个属性是做什么的呢?
mapperLocations:它表示我们的Mapper文件存放的位置,当我们的Mapper文件跟对应的Mapper接口处于同一位置的时候可以不用指定该属性的值。
为了避免每次都需要指定这个东西,我们将Mapper接口和Mapper.xml文件放一个包下,就可以把它注掉了,注意这两个文件的名字除了尾缀格式不一样,其他都一样的才可以。否则在调用DAO时候会报错Invalid
bound statement (not found)
<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)
相关文章推荐
- mybatis-spring集成:配置多数据库源中遇到的问题--MapperScannerConfigurer配置
- springmvc+mybatis+maven项目集成的时候遇到一个问题,项目搭起来以后,http请求怎么都进不到controller中,页面直接返回404错误,控制台没有报任何错误,请大神帮我看看
- springmvc+mybatis+maven项目集成的时候遇到一个问题,项目搭起来以后,http请求怎么都进不到controller中,页面直接返回404错误,控制台没有报任何错误,请大神帮我看看
- mybatis-spring集成:配置多数据库源中遇到的问题
- mybatis-spring集成:配置多数据库源中遇到的问题
- Spring+SpringMVC+MyBatis遇到的所有问题汇总
- Spring项目集成Spring-Session以及可能遇到的问题
- spring mvc+spring+mybatis搭建javaWeb项目时遇到的一些问题
- 关于mybatis集成spring时,dataSource设置propertyPlaceholder的问题
- spring ,springMVC,Mybatis和ehcache整合遇到的问题
- 搭建springMVC+Mybatis的Maven项目过程中遇到的问题汇总。
- springmvc+spring+mybatis项目部署中遇到的问题
- Spring 整合mybatis时遇到的问题
- spring同时集成redis和mongodb时遇到多个资源文件加载的问题
- maven-spring-mybatis 遇到一些问题
- springmvc+spring+mybatis集成问题汇总
- Spring整合Mybatis在引入属性文件的时候遇到的问题
- spring下的hibernate的集成遇到的多个问题
- Mybatis与spring项目中遇到的奇怪的问题:Loaded JDBC driver: com.mysql.jdbc.Driver
- Spring与Mybatis的整合过程中遇到的一些问题