1. 程式人生 > 實用技巧 >Mapper檔案package目錄中,執行方法不能匹配錯誤(maven打包過濾src下的xml)

Mapper檔案package目錄中,執行方法不能匹配錯誤(maven打包過濾src下的xml)

Mybatis 中Mapper使用package方式配置報錯org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

程式碼結構如圖

dao和對應的mapper檔案都在同一個包下,下面是mybatis配置,

執行程式碼總是提示使用的方法為繫結,反覆檢查程式碼沒有問題,突然開啟target中的,沒有發現xml mapper檔案,原因maven會自動過濾src下的xml等檔案

知識點:

maven 打包會自動過濾src,package 下的xml檔案,不會將其編譯

解決方案:

方案一:
<build>
    <finalName>test</finalName>
    <!--
    這樣也可以把所有的xml檔案,打包到相應位置。
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
                <include>**/*.tld</include>
            </includes>
            <filtering>false</filtering><--這裡是false-->
        </resource>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
                <include>**/*.tld</include>
            </includes>
            <filtering>false</filtering>
        </resource>
    </resources>
</build>

方案二:

<build>
    ...
    </plugins>
        ...
        <!--
        此plugin可以用
        利用此plugin,把原始碼中的xml檔案,打包到相應位置,
        這裡主要是為了打包Mybatis的mapper.xml檔案 
        -->
        <plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.5</version>
            <executions>
                <execution>
                    <id>copy-xmls</id>
                    <phase>process-sources</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${basedir}/target/classes</outputDirectory>
                        <resources>
                            <resource>
                                <directory>${basedir}/src/main/java</directory>
                                <includes>
                                    <include>**/*.xml</include>
                                </includes>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin>      
    </plugins>     
</build>

方案三:

程式碼規範一下,xml等配置檔案,全部放在resources下