报错信息:
Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [tk/mybatis/mapper/autoconfigure/MapperAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'URL [jar:file:/home/war/spring/fanli/login.jar!/BOOT-INF/lib/common-0.0.1-SNAPSHOT.jar!/mapper/AccountMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.wst.common.mapper.AccountMapper.BaseResultMap
引用公共模块报错,就算没用到公共模块里面的东西也会报错
找到原因了
mapper-locations: classpath:mapper/*.xml,classpath*:mapper/*.xml classpath和classpath*区别: classpath:只会到你的class路径中查找找文件。 classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找。 这两者后面的通配符都能起作用,只是范围不同。
因为配置了
classpath*:mapper/*.xml
我的理解是因为classpath*,找mapper时会去\BOOT-INF\lib\找jar包中的mapper同时也会去\BOOT-INF\classes\找,因为引入了公共依赖jar,其中也包含mapper,此时就会出现两个同名的.xml所以报错重复BaseResultMap,将classpath的*去掉后问题解决了
但实际上class下并没有包含mapper相关,看似解决了但并没有完全解决,有懂得还请指导下
好像数据库连接失败了。看不太清楚。
你这报错很明显,xml中有重复的BaseResultMap,自己搜下是不是多个