zoukankan      html  css  js  c++  java
  • 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就会报错终止解析。

    作者:Binge
    本文版权归作者和博客园共有,转载必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    @resource、@Autowired、@Service在一个接口多个实现类中的应用
    java 中 静态块的作用
    数组、List和ArrayList的区别
    C#优化
    Net XML操作
    Asp.Net MVC+EF+三层架构的完整搭建过程
    C#多线程
    算法
    详解java中的byte类型
    虚幻4蓝图编译剖析(三)
  • 原文地址:https://www.cnblogs.com/binbingg/p/13791801.html
Copyright © 2011-2022 走看看