引言

学过 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就会报错终止解析。

mybatis 同时使用 XML 和注解的更多相关文章

  1. Mybatis之XML、注解

    前言 上篇简单介绍了Mybatis的简单实用,本篇先对上次实验环境的一些内容进行优化,然后验证Mybatis的XML配置以及注解方式. 实验环境优化 数据库配置 在mybatis的配置文件中,引入数据 ...

  2. MyBatis笔记----MyBatis数据库表格数据修改更新的两种方法:XML与注解

    继上 http://www.cnblogs.com/tk55/p/6659285.html http://www.cnblogs.com/tk55/p/6660477.html 注解 将id:8 na ...

  3. MyBatis笔记----MyBatis查询表全部的两种方法:XML与注解

    查询单条信息的在 http://www.cnblogs.com/tk55/p/6659285.html  已经有了 XML 修改UserMapper.xml <?xml version=&quo ...

  4. 关于Mybatis中Mapper是使用XML还是注解的一些思考

    XML 据说可以灵活的进行注解,但是修改以后还是要重新发布程序.当然,你可以说,在Tomcat中改了,然后热加载了,不就可以了.可是一般情况下都是几台,十几台服务器.都是用发布系统,持续集成的方式部署 ...

  5. MyBatis 使用简单的 XML或注解用于配置和原始映射

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .My ...

  6. springboot使用Mybatis(xml和注解)全解析

    ​  刚毕业的第一份工作是 java 开发,项目中需要用到 mybatis,特此记录学习过程,这只是一个简单 demo,mybatis 用法很多不可能全部写出来,有更复杂的需求建议查看 mybatis ...

  7. mybatis开发,你用 xml 还是注解?我 pick ...

    最近在看公司项目时发现有的项目mybatis是基于注解开发的,而我个人的习惯是基于xml文件开发. 对于mybatis注解开发的原理理解不够,于是翻阅了部分源码,写下此文.主要介绍了mybatis开发 ...

  8. MyBatis 项目开发中是基于 XML 还是注解?

    只要你对 MyBatis 有所认识和了解,想必知道 MyBatis 有两种 SQL 语句映射模式,一种是基于注解,一种是基于XML. 基于 XML <mapper namespace=" ...

  9. mybatis学习一:基于xml与注解配置入门实例与问题

    注:本case参考自:http://www.cnblogs.com/ysocean/p/7277545.html 一:Mybatis的介绍: MyBatis 本是apache的一个开源项目iBatis ...

随机推荐

  1. JavaScript深入理解-Promise以及常用方法详解

    Promise Promise 介绍 Promise 对象表示一个异步操作的最终完成(或失败)及其结果值. 状态: 一个 promise 必然处于以下几种状态之一 待定:初始状态(pending) 已 ...

  2. c++排序相关的参数“cmp“的用法及理解

    对sort函数(需要algorithm头文件),它的cmp可以是"函数",也可以是"对象" bool myfunction (int i,int j) { re ...

  3. 如何建立一个足够安全的SSH连接?

    1 概述 使用SSH连接服务器是一件很平常的事,但是,连接是否足够安全是一个令人担忧的问题.本文从如下几个方面介绍了如何建立一个足够安全的SSH连接: 端口 协议 用户 密码 密钥对 ssh-agen ...

  4. IDEA 全局搜索,搜索Jar包中内容

    配置find in path Ctrl+Shift+F Step 1:点击Scope Step 2:点击"..."更多 Step 3:点击加号"+" Step ...

  5. 死磕Spring之AOP篇 - Spring AOP注解驱动与XML配置

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读. Spring 版本:5.1 ...

  6. Day09_46_Set集合_SortedSet03

    SortedSet03 让SortedSet集合完成比较,还有另外一种方法,那就是单独编写一个比较器. java.util.comparator 在TreeSet集合创建的时候可以在集合中传入一个比较 ...

  7. Effective Java 笔记

    1. 静态工厂 静态工厂的第 5 个优点是,在编写包含该方法的类时,返回的对象的类不需要存在.他的意思是面向接口编程??就是说我们只需知道接口,具体实现类是否存在没有关系?? 只提供静态工厂方法的主要 ...

  8. Mysql - 使用入门

    本文是学习 Mysql必知必会 后的笔记 学习之前需要创建一个数据库,然后导入下面两个mysql脚本 create database db1 charset utf8; ############### ...

  9. Sql server注入一些tips

    sql server环境测试: 几个特性: 1.sql server兼容性可以说是最差的. 举例: select x from y where id=1 字符串查询 select x from y w ...

  10. 【cypress】6. cypress的默认文件结构介绍

    通过之前的一些介绍,已经大概其明白cypress是个啥,但是具体使用的细节点还有很多,需要一步步的去学习. 在安装好cypress之后,会生成一个默认项目,这个项目结构里的各个文件夹是干嘛使的呢? 一 ...