mybatis同时启用mapperscanner和传统DAO

在经过MapperScannerConfigurer启用了mybatis的映射器以后,默认状况下,在basePackage下的全部接口类都会被无条件的自动代理,以下所示:html

    <!--mapper 扫描配置 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--basePackage指定要扫描的包,在此包之下的映射器都会被 搜索到。可指定多个包,包与包之间用逗号或分号分隔 -->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
        <property name="basePackage" value="com.ld.platform.*.dao" />
    </bean>

此时,不管com.ld.platform.*.dao下的类是否具备对应的实现类,在自动注入的时候,mybatis都会根据完整类型标识符去寻找相应的mapper.xml,若是找不到,则会报mybatis BindingException,有些时候,对于复杂的SQL语句,没法经过工具自动生成mapper,此时须要手工编写SQL,虽然能够在自动生成的mapper中自定义SQL文件,可是有些时候由其余项目组提供jar或者这些自动生成的mapper不容许被人工编辑。spring

若是但愿这些自定义编写的SQL和以前版本同样经过@SqlSession进行增删改的话,须要将这些类放在basePackage匹配不到的路径。这样mybatis就不会自动去生成代理类了。sql

其实这种状况有较多项目组可是没有一个公共的架构师规划的系统中,这种状况是很常见的,毕竟开发人员的水平和经验参次不齐。并且有些时候,一厢情愿的认为技术上彻底能够合并这是很天真的,由于大部分的公司多少存在着利益间的冲突。关于这一点,具体可参考http://www.cnblogs.com/zhjh256/p/6193254.html。mybatis

相关文章
相关标签/搜索