mybatis 同時使用 XML 和注解


引言

學過 MyBatis 框架的童靴都知道, MyBatis 支持 XML 和注解兩種方式配置,如下:

使用 XML 方式配置

只寫明 XML 的 resource 路徑(或者URL路徑)

<mappers>
    <mapper resource="com/UserMapper.xml"/>
 </mappers>
使用注解方式配置

只寫明注解Mapper的類全路徑名(這種方式只適合於只包含注解的配置)

<mappers>
    <mapper class="com.UserMapper"/>
</mappers>

我們知道,以上 XML 和注解方式各有利弊;有的童靴可能會想,那能不能 XML 和注解這兩種方式一起用,這樣可以盡量發揮各自的長處。答案是 MyBatis 可以同時使用 XML 和注解兩種方式配置。

同時使用 XML 和注解方式配置(不同映射器接口類)
<mappers>
    <mapper resource="com/GameMapper.xml"/>
    <mapper class="com.UserMapper"/>
</mappers>

可以看到,以上兩種方式配置是針對不同的映射器接口類。那么,是否可以在同一個映射接口類中同時使用 XML 和注解方式呢?答案依然是可以。

同時使用 XML 和注解方式配置(同一映射器接口類)
<mappers>
    <mapper class="com..UserMapper"/>
    <mapper resource="com/UserMapper.xml"/>
</mappers>
  • 這種方式一定要把類的配置寫在 XML 的配置之前。

因為先解析完 mapper 之后,可以繼續解析 xml,解析 xml 時如果判斷 mapper 解析過之后則不會重復解析也不會拋錯,但是如果先解析 xml,會向Configuration 中注冊 Mapper,當之后解析 Mapper 時如果檢測到有加載過則會拋出異常並終止程序創建 SqlSessionFactory。

  • 不允許對一個方法既XML 配置又注解,這會報錯。

因為在解析每個 sqlmap 的時候會給其生成唯一的 ID,並存入 MapperRegistry 中,這個注冊中心本質上是一個 HashMap,且不允許插入已經存在的 key 值,做插入操作時如果檢測到已存在同名ID就會報錯終止解析。


免責聲明!

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



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