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

相關文章
相關標籤/搜索