转载转载转载:https://www.cnblogs.com/ewwwe/p/6181872.html
在mapper代理的开发中,程序员需要遵守一些规范,mybatis才能实现mapper接口的代理对象。
它的规范如下:
- mapper.xml的namespace要写所映射接口的全称类名。
- mapper.xml中的每个statement的id要和接口方法的方法名相同
- mapper.xml中定义的每个sql的parameterType要和接口方法的形参类型相同
- mapper.xml中定义的每个sql的resultType要和接口方法的返回值的类型相同
- mapper.xml要和对应的mapper接口在同一个包下
- mapper.xml的命名规范遵守: 接口名+Mapper.xml
如果以上检查完毕,项目都遵守了上述的规范,而且你的项目是Maven项目。但是运行程序还是会出现Mybatis invalid bound statement(not found)的问题,这个时候就需要修改pom.xml文件了。在pom.xml中添加如下的代码:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<!-- 此配置不可缺,否则mybatis的Mapper.xml将会丢失 -->
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<!--指定资源的位置-->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.yml</include>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
这个连接里面讲的很全面,几乎 包含了所有要注意核对的点,请优先看这个链接。
对以上链接的补充:配置文件中 需要以下配置
mybatis:
#com.chinacaring.jianhuoracleservice.dao.mapper
mapper-locations: classpath:com/chinacaring/jianhuoracleservice/dao/mapper/**/*.xml
一、问题描述
项目使用多个模块构建,其中 B模块依赖于A模块,A模块中有mapper 和对应的xml用于查询数据。但是启动项目之后,报如下错误:Invalid bound statement (not found): com.chinacaring.user.dao.mapper.UserMapper.getUserInfo
开始以为 没有加上mapperscan 未扫描对应的mapper,后来加上后还是同样的问题。
二、原因和解决方法
原因在于 和mapper相互绑定的 .xml文件不是代码,无需编译,但是需要指定在编译时 将 指定的资源文件(此处为 .xml文件)拷贝到对应目录下(此处应当为 编译好之后 类文件的对应目录)
在 pom中加入:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</build>
指定将 src/main/java目录下 匹配 **/*.xml格式的 文件 拷贝到 编译后的类文件相同目录下
不加之前 target的结构
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyM3YTNxITM5ADMzUDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
加了拷贝资源的build之后
可见 指定的xml资源文件被 拷贝进来了,这样,再次运行 就可以找到mapper所绑定xml文件,并执行相应的操作了
最后贴一下项目完整的POM文件结构:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.16.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<mybatisplus-spring-boot-starter.version>1.0.4</mybatisplus-spring-boot-starter.version>
<mybatisplus.version>2.1-gamma</mybatisplus.version>
</properties>
<dependencies>
</dependencies>
<repositories>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.yml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
</project>