0

在网上搜了一大圈,代码、路径、配置等都试过了,还是不知道为什么

版本号等信息
IDE: IntelliJ IDEA 2019.1 x64
MySQL: Server version 5.6.42-log MySQL Community Server(GPL)
JDK: java version 1.8.0_201
Mybatis: 3.4.4
spring boot: 2.0.2
Tomcat: 8.5.31

出错截图

clipboard.png

出错代码
Controller层

clipboard.png

service层(就不贴interface了)

clipboard.png

Manager层

clipboard.png

mapper

clipboard.png

xml文件

clipboard.png

dao层目录

clipboard.png

目录结构

clipboard.png

mybatis配置路径(application.yml)

clipboard.png

mybatis配置文件

clipboard.png

clipboard.png

看网上解决方法,在pom.xml中加了这段

clipboard.png

且我在debug的时候,发现mybatis源码中,Configuration类中有一个成员和两个方法,为:

/*文件Configuration.java*/
protected final Map<String, MappedStatement> mappedStatements = new StrictMap<MappedStatement>("Mapped Statements collection");

public boolean hasStatement(String statementName) {
  return hasStatement(statementName, true);
}

public boolean hasStatement(String statementName, boolean validateIncompleteStatements) {
  if (validateIncompleteStatements) {
    buildAllStatements();/*这个函数中只有四个if,且都没有执行*/
  }
  return mappedStatements.containsKey(statementName);/*这里没有在mappedStatements中找到目标statement,于是返回上层函数*/
}
/*我在mappedStatements中找了,确实没有我的目标statement*/
/*文件MapperMethod.java*/
    private MappedStatement resolveMappedStatement(Class<?> mapperInterface, String methodName,
        Class<?> declaringClass, Configuration configuration) {
      String statementId = mapperInterface.getName() + "." + methodName;
      if (configuration.hasStatement(statementId)) {/*这个if判断这里,应该返回为true进入if中,结果走到了else if中,返回了null,后面就跳转到错误处理相关代码部分了*/
        return configuration.getMappedStatement(statementId);
      } else if (mapperInterface.equals(declaringClass)) {
        return null;
      }
      for (Class<?> superInterface : mapperInterface.getInterfaces()) {
        if (declaringClass.isAssignableFrom(superInterface)) {
          MappedStatement ms = resolveMappedStatement(superInterface, methodName,
              declaringClass, configuration);
          if (ms != null) {
            return ms;
          }
        }
      }
      return null;
    }

希望有大神帮忙解决一下,已经搞了好几天了,一直解决不了

魏巍 2
5 天前提问
1 个回答
0

通过测试,解决了问题,但是依然不清楚原因

测试发现
第一步,用IDEA运行,会出现上述错误
第二步,用eclipse运行,没有错误,程序正常运行
第三步,用IDEA运行,不会出现错误,正常运行

错误解决了,可是错误出现的原因还是不清楚,推测出现错误可能的因素有:
1.IDEA自身配置问题
2.由于之前这个项目是在eclipse上创建的,之前的项目成员也都是在eclipse上开发的,可能导致某些地方,例如配置,设置等不兼容

撰写答案

推广链接