日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在springBoot中使用Mapper类问题_@Mapper_@MapperScan_xml文件跟mapper分开_xml文件跟mapper在同一个目录下

發布時間:2025/3/12 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在springBoot中使用Mapper类问题_@Mapper_@MapperScan_xml文件跟mapper分开_xml文件跟mapper在同一个目录下 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 背景
  • xml文件跟mapper分開
    • application.properties
    • 方式一: 主程序中@MapperScan
    • 方式二: 每個接口添加@Mapper
    • 注意點
  • xml文件跟mapper在同一個目錄下
  • SpringBoot中關于@Mapper 和 @Repository 的一些疑問
      • 1. @Mapper
      • 2. @Repository
      • 3. @MapperScan(“com.xxx.xxx”)
      • 4. 總結


背景

在springBoot中使用mapper類,因為有其xml文件的存在,所以其xml文件的存放位置不同,會導致出現運行是否能夠調用xml文件的問題存在;這個問題我遇到N多次了,不好好的解決一番,實在是不好繼續寫項目下去了;

xml文件跟mapper分開

當xml文件跟mapper文件分開的時候,也就是將xml文件放在springBoot下的src/main/resources文件下,如下所示:

application.properties

當分開的時候,我們需要在application.properties主配置文件中配置如下:

mybatis.mapper-locations=classpath:mapper/*.xml
  • mybatis.mapper-locations
    指明是xml文件的路徑

方式一: 主程序中@MapperScan

為了讓mybatis掃描到我們的包,還需要在主程序中聲明Mapper包的掃描,如下:

也可以不配置上邊的掃描,在每個Mapper文件上加上@Mapper注解,每個文件都需要寫上,沒有上邊的方便。

按照上邊的配置,不需要在Mapper類中添加注解的,當我們在Service類中直接調用就是了,因為配置文件指明了;
但是這樣idea會報紅!
當我們在Service中調用的時候,還是會報無法注入,如下展示:
在PermissionMapper類中:

之后在Service類中使用Autowired注入,如下:

注意了:
這樣雖然報錯,但是項目運行沒有一點影響!

如圖運行成功:

也就是說是無傷大雅的;

但是要想消除這個idea的報錯也可以滴;無法注入,是說沒有這樣的Bean存在,那么我們就添加一個注解,注入Bean嘛,所以在Mapper包下的所有mapper接口添加一個
@Repository注解
或者是
@Component注解

其效果是一樣的,都是告知spring管理這個類為Bean;

這樣就不會有報錯了,如下:

方式二: 每個接口添加@Mapper

在方式一中,我們需要在主程序類中告訴Mybatis掃描mapper包;添加@MapperScan注解
如下:

我們也可以在每一個mapper接口中添加@Mapper注解,這樣就不需要在主程序類中添加掃描了;如下:

注意點

在上面的兩種方式中,有一個繞不開的點,就是在resources目錄下創建的目錄的時候,跟在java目錄下創建目錄是不一樣的;

在java文件中我們創建的目錄可以使用

這樣表示子級目錄,但是在resources文件下創建使用.

idea創建的時候就會誤認為是一個名字,如下這樣創建:

在盤符系統中,是這樣的:

點開之后就只是一個文件,如下:

實際上我們需要使用的是子級目錄形式,也就是在application.properties中寫的:
mybatis.mapper-locations=classpath:mapper/*.xml

是一個目錄路徑;

所以,在resources目錄下創建文件,需要以/創建,如下這樣的形式:

這個鍋就是idea來背!!!!!當我們打開其目錄結構,就可以發現,如下:

點開之后如下:

但是idea本身也可查看其到底是否是一個目錄,如下:

這樣就可以顯示是否是一個目錄結構了,如下:

xml文件跟mapper在同一個目錄下

application.properties中不需要配置這個。

mybatis.mapper-locations=classpath:mapper/*.xml

在mapper包下

將原來在resources的mapper目錄下的xml文件全部剪切到mapper包下,如下:

主程序類

主程序類還是指明了Mybatis掃描的包,不加@MapperScan掃描,可以在mapper文件中單獨加上@Mapper注解。

然后運行主程序類,再訪問,如下:

報錯:找不到mapper.xml

注意了

xml文件是沒有問題的,其它的也沒有問題的;因為按照前面分開mapper類和xml文件,運行及其功能都是沒有問題的!!!

并且在Ecplise中運行,按照上面的方式去配置,運行也沒問題。。。。
但是在idea中就是不行。。。。。。。

百度了好大一會兒,才解決;

在idea中,默認情況下是不會去編譯src/main/java下的xml文件的!!!
在idea中,默認情況下是不會去編譯src/main/java下的xml文件的!!!

所以需要我們自己配置src/main/java也可以編譯資源文件,在pom.xml文件中,如下:

<!--資源路徑--><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource></resources>

注意這個資源是配置到build標簽下的
然后當我們再運行的時候,就成功了~~~~
如下:

并且在編譯文件中也有,如下:

SpringBoot中關于@Mapper 和 @Repository 的一些疑問

@Mapper 是 Mybatis 的注解,和 Spring 沒有關系,@Repository 是 Spring 的注解,用于聲明一個 Bean。

1. @Mapper

Mybatis 需要找到對應的 mapper,在編譯的時候動態生成代理類,才能實現對數據庫的一系列操作,所以我們需要在接口上添加 @Mapper 注解。

例如(這里只是為了演示并且sql不復雜,所以這里使用注解的方式來編寫sql語句):

@Mapper public interface UserMapper {@Select("select * from user where id = #{id}")User getById(Integer id);@Select("select * from user")List<User> getAll(); }

編寫測試方法,可以發現加了自動裝配注解的userMapper會出現報錯(并不影響代碼正常運行),這是因為@Mapper是Mybatis中的注解,我們沒有顯示的標明UserMapper是spring中的一個Bean,idea此時會認為在運行時找不到實例注入,所以會提示錯誤

雖然這個報錯并不影響代碼的正常運行,但是看著很不舒服,我們可以@Repository注解(也可以使用@Componet,只要注明這是一個bean就可以)來顯示的說明UserMapper是一個bean

2. @Repository

@Repository 是spring提供的一個注解,用于聲明 dao 層的 bean,如果我們要真正地使用 @Repository 來進行開發,那么我們需要手動實現UserMapperImpl,也就是說手寫 JDBC代碼!!!

@Repository public class UserMapperImpl implements UserMapper{@Overridepublic User getById(Integer id){// 裝載Mysql驅動// 獲取連接// 創建Statement// 構建SQL語句// 執行SQL返回結果} }

3. @MapperScan(“com.xxx.xxx”)

如果我們不使用@Mapper注解,還有另一種方式讓Mybatis找到mapper接口,那就是 @MapperScan 注解,可以在啟動類上添加該注解,自動掃描包路徑下的所有mapper接口。

@SpringBootApplication @MapperScan("com.example.springboot_mybatis.mapper") public class SpringbootMybatisApplication {public static void main(String[] args) {SpringApplication.run(SpringbootMybatisApplication.class, args);} }

使用@MapperScan注解之后,就不需要在mapper接口上添加任何注解了!!

4. 總結

  • 總的來說,@Mapper 和 @MapperScan 這兩個必須有一個,否則就會出錯!
  • @Repository 可有可無,對程序正常運行沒什么影響,但是可以消除idea報錯的問題

總結

以上是生活随笔為你收集整理的在springBoot中使用Mapper类问题_@Mapper_@MapperScan_xml文件跟mapper分开_xml文件跟mapper在同一个目录下的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 色悠悠av | 一区二区国产精品 | 狠狠干狠狠干 | 高潮av| 老熟妇精品一区二区三区 | 男生舔女生胸 | 精品无人区无码乱码毛片国产 | 免费无毒av | 国产一级做a爰片久久毛片男男 | 一级做a免费视频 | 伊人精品视频 | 亚洲av成人一区二区国产精品 | 久久国产91| 日本精品免费在线观看 | 福利视频在线免费观看 | 亚洲精品粉嫩小泬20p | 久久91亚洲人成电影网站 | 国产欧美在线观看不卡 | 国产又黄又爽 | 久久视频精品在线 | 天天操天天干天天插 | 日本少妇高潮喷水xxxxxxx | 日本黄色片 | 久久久久久18 | 一区二区国产电影 | 国产乱码一区二区三区播放 | 日韩在线电影一区 | 久久久国产成人 | 欧美精品在线一区二区三区 | 午夜影院免费看 | av在线播放器 | 黑人玩弄人妻一区二区绿帽子 | 国产一级片黄色 | 91精品又粗又猛又爽 | 青久草视频 | 玖玖色在线 | 中文字幕高清在线观看 | 最新中文字幕在线观看 | 精品久久国产 | 国产精品久久在线 | 加勒比一区二区三区 | 天天爽夜夜爽视频 | 乱人伦xxxx国语对白 | av 日韩 人妻 黑人 综合 无码 | www.av小说 | 久久久精品久久久 | 超碰在线小说 | 新婚之夜玷污岳丰满少妇在线观看 | 天码人妻一区二区三区在线看 | 苍井空亚洲精品aa片在线播放 | 污视频在线免费 | 欧美久操 | 成人午夜视频免费观看 | 精品成人一区二区三区久久精品 | 色姑娘综合网 | 午夜tv影院 | 亚洲美女视频网站 | 97人人干 | 每日更新av | 国产精品免费在线播放 | 国产精品一区久久久 | 久久艹中文字幕 | 亚洲无人区码一码二码三码的含义 | 亚洲精品在线免费观看视频 | 免费看91 | 久久久精品 | 中文字幕一区二区三区门四区五区 | 在线免费看污视频 | 久久丫精品国产亚洲av不卡 | 真实的国产乱xxxx在线 | 成人av在线网站 | 久久麻豆av| 日韩久久久 | 九热在线视频 | 小柔的淫辱日记(h | 午夜资源| 影音先锋在线看 | h片在线观看免费 | 17c国产精品一区二区 | 99这里都是精品 | 住在隔壁的她动漫免费观看全集下载 | av香蕉网 | 九九热这里有精品 | 9色91| 日本久久一区二区 | 国产野外作爱视频播放 | 精久久久久久久 | 精品国产一区二区三区久久久蜜臀 | 少妇人妻一区二区 | 中文字幕亚洲专区 | 日日夜夜爱爱 | 亚州视频在线 | 亚洲福利精品视频 | 中文字幕2018| 亚洲综合色一区二区 | 久久老女人| 激情福利 | 毛片视频免费 | 精品国产乱码一区二区三区99 |