Spring Boot整合MyBatis:@Mapper、@MapperScan與mybatis.mapper-locations如何協(xié)同工作?

Spring Boot整合MyBatis:@Mapper、@MapperScan與mybatis.mapper-locations如何協(xié)同工作?

spring Boot集成mybatis:注解@Mapper、@MapperScan和配置項(xiàng)mybatis.mapper-locations的協(xié)同作用

spring boot與MyBatis的整合開發(fā)中,Mapper接口xml映射文件的關(guān)聯(lián)配置至關(guān)重要。本文將詳細(xì)分析@Mapper、@MapperScan注解以及mybatis.mapper-locations配置參數(shù)之間的差異與協(xié)同機(jī)制,并解釋為何僅使用注解會導(dǎo)致org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)錯誤。

該錯誤提示MyBatis無法找到對應(yīng)的sql語句映射。雖然@Mapper(用于Mapper接口)、@MapperScan(用于啟動類)以及mybatis.mapper-locations配置參數(shù)都與Mapper接口位置相關(guān),但它們的功能并非完全相同。

@Mapper和@MapperScan注解的作用是讓spring容器掃描并注冊Mapper接口,Spring會為這些接口創(chuàng)建代理對象,從而實(shí)現(xiàn)與MyBatis的集成。 例如,Spring可以識別UserMapper接口并將其納入管理。但是,這僅僅是將接口注冊到Spring容器,并沒有告知MyBatis在哪里尋找對應(yīng)的SQL映射文件(XML文件)。

mybatis.mapper-locations=classpath:mapper/*.xml配置參數(shù)則明確指示MyBatis到classpath:mapper目錄下查找所有.xml文件。這些XML文件包含了Mapper接口方法與sql語句的映射關(guān)系。 MyBatis正是依靠這些XML文件,才能根據(jù)UserMapper.selectByPrimaryKey方法找到相應(yīng)的SQL語句。

因此,僅使用@Mapper或@MapperScan注解,Spring可以成功掃描并注冊UserMapper接口,但MyBatis卻找不到對應(yīng)的SQL映射文件,從而引發(fā)Invalid bound statement錯誤。只有同時配置mybatis.mapper-locations,MyBatis才能找到正確的XML文件,完成接口方法與SQL語句的綁定,程序才能正常運(yùn)行。 它們并非互斥關(guān)系,而是相輔相成,共同完成MyBatis的配置和運(yùn)行。 @Mapper和@MapperScan負(fù)責(zé)接口注冊,而mybatis.mapper-locations負(fù)責(zé)SQL映射文件的加載。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊12 分享