• mybatis自定义之优先从classes目录加载,加载之后遇到相同的类定义时不再加载


      如果mybatis中包含了两个相同定义的mapper,启动时出现下列异常:

    Caused by: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.xxx.BaseResultMap
    at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:872) ~[mybatis-3.4.6.jar!/:3.4.6]
    at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:844) ~[mybatis-3.4.6.jar!/:3.4.6]
    at org.apache.ibatis.session.Configuration.addResultMap(Configuration.java:626) ~[mybatis-3.4.6.jar!/:3.4.6]
    at org.apache.ibatis.session.RefreshConfiguration.addResultMap(RefreshConfiguration.java:57) ~[-starter-service-20191118.062118-160.jar:3.4.6]
    at org.apache.ibatis.builder.MapperBuilderAssistant.addResultMap(MapperBuilderAssistant.java:214) ~[mybatis-3.4.6.jar!/:3.4.6]
    at org.apache.ibatis.builder.ResultMapResolver.resolve(ResultMapResolver.java:47) ~[mybatis-3.4.6.jar!/:3.4.6]
    at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:285) ~[mybatis-3.4.6.jar!/:?]

      原因是mybatis定义的StrictMap加了防覆盖判断,通常的解决方法是检查一遍代码去掉重复的即可。但是LZ有时候需要的场景是为了验证快,临时将mapper修改后不再打包,放在外围的classpath目录优先加载,也就是class的加载顺序机制,而不是重新打包、发包,有时候这甚至不可能。分析源码可知,我们只要在org.apache.ibatis.session.Configuration#addResultMap或org.apache.ibatis.session.Configuration.StrictMap#put加个判断即可。如下:

        public V put(String key, V value) {
          if (containsKey(key)) {  // 可以考虑此处加判断,如果已经存在就什么都不做
            throw new IllegalArgumentException(name + " already contains value for " + key);
          }
          if (key.contains(".")) {
            final String shortKey = getShortName(key);
            if (super.get(shortKey) == null) {
              super.put(shortKey, value);
            } else {
              super.put(shortKey, (V) new Ambiguity(shortKey));
            }
          }
          return super.put(key, value);
        }
  • 相关阅读:
    常用Git命令清单
    上海金瑢信息有限公司面试
    上海视频面试
    bootstrp-3.0
    B站小姐姐面试分享2
    B站小姐姐分享第一次电话面试
    Array.from()方法就是将一个类数组对象或者可遍历对象转换成一个真正的数组。
    findIndex
    es5,es6
    es6数组去重
  • 原文地址:https://www.cnblogs.com/zhjh256/p/11968671.html
Copyright © 2020-2023  润新知