创建站点的方法,互动网站建设公司,30天网站建设实录,室内设计学校哪些比较好一、背景
同事在同一个mapper.xml #xff08;namespace相同#xff09;#xff0c;复制了一个sql没有修改id#xff0c;正常启动项目。但是我以前使用mybatis的时候如果在namespace相同情况下#xff0c;id重复#xff0c;项目会报错无法正常启动#xff0c;后来看代码…一、背景
同事在同一个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方法。