MyBatis:将映射器 xml 文件放在 java 下的映射器接口旁边
MyBatis: putting mapper xml files next to mapper interfaces under java
我正在寻找将映射器 xml 文件从 "resources" 下移动到 "java" 文件夹下的方法。我希望这是可能的,因为这样 interface.java 文件和 mapper.xml 文件将并排。
我正在使用 Spring 启动。
application.properties:
mybatis.config-locations = classpath:mybatis-config.xml
resources/mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<mappers>
<mapper url="file:///home/abc/Projects/myproject/myapp/src/main/java/com/abc/services/myservice/MyMapper.xml"/>
</mappers>
</configuration>
文件夹/home/abc/Projects/myproject/myapp/src/main/java/com/abc/services/myservice/
MyMapper.xml
MyMapper.java
当我 运行 应用程序时,出现 'not found' 错误:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.abc.bm.services.myservice.MyMapper.findAll
有办法实现吗?
您需要将资源文件从源文件夹复制到目标输出文件夹。
对于 Maven,这是使用 maven-resource-plugin
:
完成的
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources01</id>
<phase>process-classes</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/classes</outputDirectory>
<encoding>UTF-8</encoding>
<resources>
<resource>
<directory>${basedir}/src</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
如果您使用的是 gradle,配置类似于:
sourceSets {
main {
resources {
srcDirs = ["src/main/java"]
includes = ["**/*.xml"]
}
}
}
或者,我使用 resource
属性,如:
<mappers>
<mapper resource="mappers/account.xml" />
</mappers>
只是一个适合我的想法,使用相对路径。
您可以添加
等资源
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
</build>
我正在寻找将映射器 xml 文件从 "resources" 下移动到 "java" 文件夹下的方法。我希望这是可能的,因为这样 interface.java 文件和 mapper.xml 文件将并排。
我正在使用 Spring 启动。
application.properties:
mybatis.config-locations = classpath:mybatis-config.xml
resources/mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<mappers>
<mapper url="file:///home/abc/Projects/myproject/myapp/src/main/java/com/abc/services/myservice/MyMapper.xml"/>
</mappers>
</configuration>
文件夹/home/abc/Projects/myproject/myapp/src/main/java/com/abc/services/myservice/
MyMapper.xml
MyMapper.java
当我 运行 应用程序时,出现 'not found' 错误:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.abc.bm.services.myservice.MyMapper.findAll
有办法实现吗?
您需要将资源文件从源文件夹复制到目标输出文件夹。
对于 Maven,这是使用 maven-resource-plugin
:
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources01</id>
<phase>process-classes</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/classes</outputDirectory>
<encoding>UTF-8</encoding>
<resources>
<resource>
<directory>${basedir}/src</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
如果您使用的是 gradle,配置类似于:
sourceSets {
main {
resources {
srcDirs = ["src/main/java"]
includes = ["**/*.xml"]
}
}
}
或者,我使用 resource
属性,如:
<mappers>
<mapper resource="mappers/account.xml" />
</mappers>
只是一个适合我的想法,使用相对路径。
您可以添加
等资源<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
</build>