Spring源码分析【8】-MyBatis注解方法不能重载
来源:互联网 发布:淘宝售前和售后的区别 编辑:程序博客网 时间:2024/06/11 19:33
代码如下:
这是不可以的,会报错:
2016-08-18 11:36:00,267 [main] ERROR [org.mybatis.spring.mapper.MapperFactoryBean] - Error while adding the mapper 'interface com.unix21.mapper.UserMapper' to configuration. java.lang.IllegalArgumentException: Mapped Statements collection already contains value for com.unix21.mapper.UserMapper.findByIdat org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:837)at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:809)at org.apache.ibatis.session.Configuration.addMappedStatement(Configuration.java:633)at org.apache.ibatis.builder.MapperBuilderAssistant.addMappedStatement(MapperBuilderAssistant.java:302)at org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.parseStatement(MapperAnnotationBuilder.java:325)at org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.parse(MapperAnnotationBuilder.java:130)at org.apache.ibatis.binding.MapperRegistry.addMapper(MapperRegistry.java:72)at org.apache.ibatis.session.Configuration.addMapper(Configuration.java:706)at org.mybatis.spring.mapper.MapperFactoryBean.checkDaoConfig(MapperFactoryBean.java:81)
class MapperFactoryBean在mybatis-spring.jar
原因一步步调试出来
org.mybatis.spring.mapper.MapperFactoryBean.checkDaoConfig
class Configuration在mybatis.jar
org.apache.ibatis.session.Configuration.addMapper
org.apache.ibatis.binding.MapperRegistry.addMapper
knownMappers
MapperProxyFactory
knownMappers.put
org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.parse
Method[] methods = type.getMethods();
org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.parseStatement
resultMapId = parseResultMap(method);
parseResultMap
applyResultMap
applyResults
applyResultMap
addResultMap
回到applyResultMap
回到parseResultMap
回到parseStatement
org.apache.ibatis.builder.MapperBuilderAssistant.addMappedStatement
statementBuilder.parameterMap
org.apache.ibatis.mapping.MappedStatement.parameterMap
回到addMappedStatement
org.apache.ibatis.mapping.MappedStatement.Builder.build
回到addMappedStatement
重点来了
org.apache.ibatis.session.Configuration.addMappedStatement
mappedStatements定义
StrictMap定义继承自HashMap重写了put
多了一行判断
if (containsKey(key))
第一次当然是containsKey(key)=false
返回addMappedStatement,mappedStatements添加完成
一直退到parse
第二次for循环methods
一直下一步...到了第二次mappedStatements.put
containsKey(key)==true产生异常
- Spring源码分析【8】-MyBatis注解方法不能重载
- Mybatis结合Spring注解自动扫描源码分析
- mybatis-Spring ClassPathMapperScanner源码分析(自定义注解加载Bean)
- mybatis源码分析-注解-1
- Spring-Mybatis源码分析
- mybatis mapper接口方法不能重载
- mybatis-spring 源码分析MapperScannerConfigurer
- Spring源码分析方法
- Spring boot源码分析-SpringBootApplication注解(8)
- Spring 注解事务处理流程源码分析
- Spring整合MyBatis(二)源码分析
- Spring整合MyBatis(二)源码分析
- Spring集成Mybatis配置与源码分析
- mybatis源码学习--spring+mybatis注解方式为什么mybatis的dao接口不需要实现类
- mybatis源码学习--spring+mybatis注解方式为什么mybatis的dao接口不需要实现类
- mybatis源码学习--spring+mybatis注解方式为什么mybatis的dao接口不需要实现类
- Spring源码分析【4】-Spring扫描basePackages注解
- Spring结合Hessian协议远程调用方法名不能重载
- 根据中文姓名或者其他中英文混合字符串获取拼音首字母
- 提高数据库处理查询速度
- Android常用的工具方法(2)
- 将十进制转换为任意进制的数
- CSS块级元素和行内元素
- Spring源码分析【8】-MyBatis注解方法不能重载
- iOS-分段控件控制页面切换
- System.out.println() 和 log4j 的 Logger 循环输出100万次。
- Excel Sheet Column Number
- PHP开发面试题目总结
- tornado 异步非阻塞 实验
- 金蝶打印时选择使用套打秒退
- linux菜鸟学习----MySQL导入.sql文件及常用命令
- DIV+CSS右列宽度自适应布局的不同实现方法