【Java】spring+mybatis BindingException: Invalid bound statement

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

版本号等信息
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

出错截图

【Java】spring+mybatis BindingException: Invalid bound statement

出错代码
Controller层

【Java】spring+mybatis BindingException: Invalid bound statement

service层(就不贴interface了)

【Java】spring+mybatis BindingException: Invalid bound statement

Manager层

【Java】spring+mybatis BindingException: Invalid bound statement

mapper

【Java】spring+mybatis BindingException: Invalid bound statement

xml文件

【Java】spring+mybatis BindingException: Invalid bound statement

dao层目录

【Java】spring+mybatis BindingException: Invalid bound statement

目录结构

【Java】spring+mybatis BindingException: Invalid bound statement

mybatis配置路径(application.yml)

【Java】spring+mybatis BindingException: Invalid bound statement

mybatis配置文件

【Java】spring+mybatis BindingException: Invalid bound statement

【Java】spring+mybatis BindingException: Invalid bound statement

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

【Java】spring+mybatis BindingException: Invalid bound statement

且我在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;

}

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

回答

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

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

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


2019.04.22更新

问题已经解决,在于某些xml文件没有正常编译,原因是路径没有配置。

目录(示例xml文件)

【Java】spring+mybatis BindingException: Invalid bound statement

增加代码(pom.xml文件)

【Java】spring+mybatis BindingException: Invalid bound statement

以上是 【Java】spring+mybatis BindingException: Invalid bound statement 的全部内容, 来源链接: utcz.com/a/91616.html

回到顶部