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
    本文版权归作者和博客园共有,转载必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    父子进程 signal 出现 Interrupted system call 问题
    一个测试文章
    《淘宝客户端 for Android》项目实战 html webkit android css3
    Django 中的 ForeignKey ContentType GenericForeignKey 对应的数据库结构
    coreseek 出现段错误和Unigram dictionary load Error 新情况(Gentoo)
    一个 PAM dbus 例子
    漫画统计学 T分数
    解决 paramiko 安装问题 Unable to find vcvarsall.bat
    20141202
    js
  • 原文地址:https://www.cnblogs.com/binbingg/p/13791801.html
Copyright © 2011-2022 走看看