1. 程式人生 > 程式設計 >解決Mybatis在IDEA中找不到mapper對映檔案的問題

解決Mybatis在IDEA中找不到mapper對映檔案的問題

剛開始在IDEA中做用Mybatis查資料庫中的資料時,報mapper對映檔案找不到,害的我檢查了好幾次配置的路徑是不是正確,但是看了好幾遍都沒有發現有拼寫錯誤。(我記得以前在eclipse中這樣寫是沒問題的)

解決Mybatis在IDEA中找不到mapper對映檔案的問題

<?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>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/><!-- 事務的型別 -->
      <dataSource type="POOLED"><!-- 資料來源 -->
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/student?characterEncoding=UTF-8"/>
        <property name="username" value="root"/>
        <property name="password" value="cyy"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="com/cyy/mybatis/student.xml"/>
  </mappers>
</configuration>

下圖為報錯截圖

解決Mybatis在IDEA中找不到mapper對映檔案的問題

然後就去網上查了一下原因,說是IDEA不會編譯src的java目錄下的xml檔案。

然後我就去查了一下編譯後的classes檔案,發現其中確實只有class檔案,並沒有xml檔案。(mybatis.xml位於resources目錄 下的)

解決Mybatis在IDEA中找不到mapper對映檔案的問題

這個問題的解決方法就是在pom.xml檔案中加上配置,讓編譯器把src/main/java目錄下的xml檔案一同編譯到classes資料夾下。

<build>
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.xml</include>
        </includes>
      </resource>
    </resources>
  </build>

補充知識:踩 專案中@MapperScan和@Mapper共存 之坑XxxMapper that could not be found.

背景:

公司專案有個小夥子將專案的日誌功能做了優化。今天在pom新增依賴,在啟動類上加個註解,然後啟動專案突然報了ModuleMapper 找不到。

加粗樣式

專案一直是好的,又沒有對這個mapper修改。進入ModuleMapper 中發現上面也是有@Mapper註解的在這裡插入圖片描述

可是為什麼容器找不到呢,分析一下剛剛修改的才做,引入依賴加註解,問題可能是註解上的問題,註釋掉新增的註解,啟動服務正常執行。罪魁禍首就是這個註解。

點解註解發現配置類上有個@MapperScan掃描注入。發現這夥計需要操作資料庫。而我接收負責的專案用的是傳統的@Mapper注入。

解決Mybatis在IDEA中找不到mapper對映檔案的問題

思考:難道在一個專案中@MapperScan和@Mapper不能共存嗎?

嘗試解決:

自己建立一個springboot 專案,開始用@Mapper 注入容器 啟動程式。程式正常啟動。

解決Mybatis在IDEA中找不到mapper對映檔案的問題

解決Mybatis在IDEA中找不到mapper對映檔案的問題

停掉服務,將mapp檔案上的@Mapper刪除 ,將檔案移動到mapper檔案中,在啟動類上新增@MapperScan 掃包注入。正常啟動。

解決Mybatis在IDEA中找不到mapper對映檔案的問題

解決Mybatis在IDEA中找不到mapper對映檔案的問題

現在測試@MapperScan 和@Mapper 分別在不包中測試一下。現在將UserMapper 放在mapper包中, 將UserTokenMapper 放在mapper2包中並新增@Mapper 啟動測試。

啟動類:

解決Mybatis在IDEA中找不到mapper對映檔案的問題

UserMapper :

解決Mybatis在IDEA中找不到mapper對映檔案的問題

UserTokenMapper :

解決Mybatis在IDEA中找不到mapper對映檔案的問題

啟動專案報錯:Description:

Field userTokenMapper in com.wyz.yangyang.member.service.impl.MemberServiceImpl required a bean of type ‘com.wyz.yangyang.member.mapper2.UserTokenMapper' that could not be found.

Action:

Consider defining a bean of type ‘com.wyz.yangyang.member.mapper2.UserTokenMapper' in your configuration.

Disconnected from the target VM,address: ‘127.0.0.1:56527',transport: ‘socket'

Process finished with exit code 1

解決Mybatis在IDEA中找不到mapper對映檔案的問題

然後我有測試可@MapperScan 掃描的包中不放mapper 檔案 ,mapper2 中mapper檔案都新增@Mapper,發現啟動正常。

又測試了@MapperScan 和@Mapper 同在一個包中,啟動正常。

在此可以看出 @MapperScan 和@Mapper在不同包中,@Mapper註解失效。

為了專案快速開發,為了以後更好的相容,我將專案改為@MapperScan 模式,因為一個註解可以配置多個包路徑。

以上這篇解決Mybatis在IDEA中找不到mapper對映檔案的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。