mybatis同時啟用mapperscanner和傳統DAO


在通過MapperScannerConfigurer啟用了mybatis的映射器之后,默認情況下,在basePackage下的所有接口類都會被無條件的自動代理,如下所示:

    <!--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不允許被人工編輯。

如果希望這些自定義編寫的SQL和之前版本一樣通過@SqlSession進行增刪改的話,需要將這些類放在basePackage匹配不到的路徑。這樣mybatis就不會自動去生成代理類了。

其實這種情況有較多項目組但是沒有一個公共的架構師規划的系統中,這種情況是很常見的,畢竟開發人員的水平和經驗參次不齊。而且有些時候,一廂情願的認為技術上完全可以合並這是很天真的,因為大部分的公司多少存在着利益間的沖突。關於這一點,具體可參考http://www.cnblogs.com/zhjh256/p/6193254.html。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM