代码之家  ›  专栏  ›  技术社区  ›  Wolf359

MyBatis:将mapper xml文件放在java下的mapper接口旁边

  •  1
  • Wolf359  · 技术社区  · 6 年前

    我正在寻找一种将映射器xml文件从“resources”下移动到“java”文件夹下的方法。我希望这是可能的,因为这样interface.java文件和mapper.xml文件将并排在一起。

    我在用弹簧靴。

    应用程序属性:

    mybatis.config-locations = classpath:mybatis-config.xml
    

    资源/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
    

    运行应用程序时,出现“未找到”错误:

    org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.abc.bm.services.myservice.MyMapper.findAll
    

    有办法做到这一点吗?

    3 回复  |  直到 6 年前
        1
  •  1
  •   Roman-Stop RU aggression in UA    6 年前

    您需要将资源文件从源文件夹复制到目标输出文件夹。

    对于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"]
            }
        }
    }
    
        2
  •  0
  •   The Impaler    6 年前

    或者,我使用 resource 属性,如:

    <mappers>
      <mapper resource="mappers/account.xml" />
    </mappers>
    

    只是一个对我有用的想法,用 相对的 路径。

        3
  •  0
  •   Kyung Hwan Min    6 年前

    您可以添加如下资源

    <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>