Spring整合MyBatis 由于类名相同导致启动异常

开始之前我们先落实一些叫法

java.lang.System 全限定名

java.lang 包名

System 类名

 

OK,通过Spring整合MyBatis,sqlSessionFactory配置如下

 

    
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="typeAliasesPackage" value="com.myapp" />
        <property name="mapperLocations" value="classpath:/mybatis/**/*Mapper.xml" />
    </bean>

  

    其中typeAliasesPackage的作用是自动扫描Entity,这个时候会自动取对应包中不包括包名的简单类名作为包括包名的别名,及只取类名。多个package之间可以用逗号或者分号等来进行分隔。

    mapperLocations的作用是指定Mapper文件的位置

 

启动的时候停在这个位置。

 

:oejs.Server:jetty-7.6.2.v20120308
:/web:Initializing Spring root WebApplicationContext

 

问题解决

    经检查发现,发现项目中存在一个类,与项目中某Mapper配置文件中resultType指向的类的全限定名不同,但类名相同的类存在。将该类名修改后正常启动。

 

后续测试

    后续测试了一下,无论Mapper.xml是否有调用到,只要项目中存在两个类的类名相同就会无法启动,哪怕全限定名不同也不行。

另外需要注意的是,

1. 不单指与MyBatis有关的Entity。哪怕是同一个类名的Controller存在也无法启动;

2. 相同类名不区分大小写。

 

猜想

    估计MyBatis配置中typeAliasesPackage扫描到的类,只保存了小写形式的类名,所以比如在配置文件中的resultType可以直接写string这种形式。通过读源码证实了猜想结果。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值