首先看看mybatis的sqlSessionFactory的典型配置:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="mapperLocations" value="classpath*:mapper/*.xml" />
    <property name="configLocation" value="classpath:mybatis-config.xml"></property>
    <property name="typeAliasesPackage" value="com.xxx"></property>
</bean>

可以看到这里的typeAliasesPackage用于搜索包下面的类并自动生成类与别名之间的映射关系。这个配置确实挺方便的,但是有时候项目中不同包下面存在相同类名的时候,会存在一些问题。单单通过包路径来限定显然不够。


通过源代码的阅读可以知道,除了通过包限定以外还可以通过父类(或实现接口)的方式来限定。从这一点可以看出面向接口编程有多重要(题外话)。这样就可以避免mybatis盲目的将一些非实体类加入映射,具体配置如下:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="mapperLocations" value="classpath*:mapper/*.xml" />
    <property name="configLocation" value="classpath:mybatis-config.xml" />
    <property name="typeAliasesPackage" value="com.xx" />
    <property name="typeAliasesSuperType" value="com.xx.xxx.BaseObject" />
</bean>