引言

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

最新文章

  1. (error) MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk
  2. 10Spring高级----青软S2SH(笔记)
  3. 转债---Pregel: A System for Large-Scale Graph Processing(译)
  4. 关于Jquery中的$.each获取各种返回类型数据的使用方法
  5. Windows server 修改mysql端口
  6. [javascript svg fill stroke stroke-width x y rect rx ry 属性讲解] svg fill stroke stroke-width rect 绘制具有圆角矩形属性讲解
  7. gradient 线性渐变 浏览器兼容
  8. Spring 框架的设计理念与设计模式分析
  9. ASP isPostBack
  10. wireshark常用的过滤命令
  11. win8.1系统下,点击一个窗口,【当前活动窗口】该窗口无法置顶
  12. SQL中的NULL值
  13. 关于Google指令(别提baidu)
  14. Object-Widgets-Quick 构造树
  15. html前端优化建议
  16. OFFICE 您正试图运行的函数包含有宏或需要宏语言支持的内容。
  17. spring 框架学习网站
  18. A1039. Course List for Student
  19. &lt;基础&gt; PHP 进阶之 类型转换
  20. Java IO如何读写文件

热门文章

  1. Scrapy 爬虫项目框架
  2. Socket简介 与 UDP
  3. k8s cronjob
  4. 记一次xss漏洞挖掘
  5. 991. Broken Calculator
  6. MSSQL数据库清理Log 压缩数据库日志文件
  7. 07- 移动端app弱网测试与fiddle弱网测试
  8. 神经网络与机器学习 笔记—Rosenblatt感知器收敛算法C++实现
  9. Conda基本使用方法
  10. 1 cmd