当前位置: 首页 > news >正文

mybatis和mybatisplus中对 同namespace 中id重复处理逻辑源码解析

一、背景

同事在同一个mapper.xml (namespace相同),复制了一个sql没有修改id,正常启动项目。但是我以前使用mybatis的时候如果在namespace相同情况下,id重复,项目会报错无法正常启动,后来看代码发现,是mybatisplus处理了id重复,项目也能正常启动。

二、mybatis 解析crud sql 的流程

mybatis启动流程,springboot启动时,加载MybatisAutoConfiguration类,创建sqlSessionFactoryBean类,执行流程sqlSessionFactoryBean -> afterPropertiesSet ->
xmlMapperBuilder.parse()->
this.configurationElement(this.parser.evalNode(“/mapper”))->
buildStatementFromContext->
parseStatementNode->
builderAssistant.addMappedStatement->
configuration.addMappedStatement(statement)
关键就在configuration中的addMappedStatement方法,如下图是mybatis中截图,mappedStatements是map集合,以id为key MappedStatement为值,mybatisplus就在这加的判断。
在这里插入图片描述
集合是在configuration初始化完成赋值成StrictMap类型。
在这里插入图片描述
继续看StrictMap中的put方法,可以看出,如果namesapce一直,id重复会抛错。
在这里插入图片描述

三、mybatisplus中流程

1、springboot启动时,加载MybatisplusAutoConfiguration类时,此类中创建了mybatis重写的sqlSessionFactoryBean类,此类中加入了自己的MybatisConfiguretion类重写了Configuretion类,拓展了crud等功能。
2、解析xml 中crud流程和mybatis大致一样,不同地方在MybatisConfiguretion类addMappedStatement方法中添加了判断,如果重复打印错误执行return跳过mybatis中的addMappedStatement方法。
在这里插入图片描述

http://www.lryc.cn/news/255872.html

相关文章:

  • linux下部署frp客户端服务端-内网穿透
  • Markdown to write
  • ResNeXt(2017)
  • DreamPlace 的下载安装与使用
  • FPGA模块——SPI协议(读写FLASH)
  • SQL自学通之表达式条件语句与运算
  • 公网域名如何解析到内网IP服务器——快解析域名映射外网访问
  • 线程安全与并发区别
  • SEO优化是什么,如何进行SEO优化
  • nodejs发起http或https请求
  • 举例C#使用特性排除某些类成员不参与XML序列化和反序列化
  • PHP基础 - 输入输出
  • 大创项目推荐 交通目标检测-行人车辆检测流量计数 - 大创项目推荐
  • 利用R语言heatmap.2函数进行聚类并画热图
  • 伦茨科技宣布ST17H6x芯片已通过Apple Find My「查找」认证
  • nodejs微信小程序+python+PHP的游戏测评网站设计与实现-计算机毕业设计推荐
  • 在 JavaScript 中导入和导出 Excel XLSX 文件:SpreadJS
  • 【Pytorch】Fizz Buzz
  • C++ Primer Plus第十四章笔记
  • CentOS 7 mini 运行环境搭建与测试——CentOS Mini 安装ifconfig工具【云原生开发部署实践笔记】
  • 案例061:基于微信小程序的互助学习系统
  • 【ELK03】ES 索引的Mapping映射详解、数据类型和settings属性设置
  • 线性代数入门与学习笔记
  • Linux安全学习路标
  • 常见的中间件--消息队列中间件测试点
  • 【USRP】5G / 6G OAI 系统 5g / 6G OAI system
  • ubuntu20.04设置开机自启动jar(依赖其他服务)
  • 【GEE笔记】在线分类流程,标注样本点、分类和精度评价
  • MATLAB基础运算
  • Linux DAC权限的简单应用