首页 > 图灵资讯 > 技术篇>正文

Spring Boot整合MyBatis:@Mapper、@MapperScan和mybatis.mapper-locations配置有何区别?

2025-03-07 21:14:41

spring boot整合mybatis:@mapper、@mapperscan和mybatis.mapper-locations配置有何区别?

Spring 集成MyBatisBoot:注释与配置文件的协同作用

Spring 在Boot和MyBatis的集成开发中,Mapper接口及其映射文件的配置往往令人困惑。本文将详细介绍@Mapper、@MapperScan注释和mybatis.mapper-locations配置文件参数之间的差异,并解释为什么只使用注释有时会导致“Invalid bound statement (not found)”错误。

许多开发者遇到过“许多开发者遇到过”Invalid bound statement (not found)“错误意味着Mybatis找不到相应的SQL映射语句。即使Mapper界面使用@Mapper注释,启动类也使用@MapperScan注释,错误仍然可能出现。只有在application.properties或application.在mybatiss中添加mybatis.mapper-locations=classpath:mapper/*.只有在xml之后,程序才能正常运行。这种现象引起了对这三种配置方法的怀疑,它们似乎都指向了Mapper接口的位置。

事实上,@Mapper和@MapperScan注释并不是直接指定Mapper接口的XML映射文件位置,而是负责在Spring容器中注册Mapper接口。@Mapper用于单个Mapper接口,@MapperScan用于扫描指定包下的所有Mapper接口,并将其注册为Spring Bean。 通过这些注释,Spring创建了Mapper接口的代理对象,便于调用MyBatis的SQL映射方法。

然而,MyBatis还需要知道SQL语句的存储位置。@Mapper和@MapperScan只负责注册Mapper接口,不知道SQL语句存储在哪个XML文件中。mybatis.mapper-locations参数明确告诉MyBatis classpath等XML映射文件的位置:mapper/*.xml表示,Mybatis应在claspath下的mapper目录中查找所有XML映射文件。

因此,@Mapper和@MapperScan负责Mapper接口的注册,mybatis.mapper-locations负责通知MyBatis SQL映射文件的位置。两者不是替代关系,而是互补关系。只有当MyBatis同时找到Mapper接口的代理对象及其相应的SQL映射文件时,程序才能正常工作。如果只使用注释而不配置mybatis.mapper-locations,MyBatis将找不到SQL映射文件,导致“Invalid bound statement (not found)”错误。 因此,在使用Mybatis时,需要同时使用注释注册Maper接口和Mybatis.mapper-locations配置映射文件路径,确保两者协同工作。

以上是Spring MyBatissoot集成MyBatistis:@Mapper、@MapperScan和mybatis.mapper-locations配置有什么区别?详情请关注图灵教育的其他相关文章!

上一篇 MySQL“=”运算符为何出现非预期模糊匹配?
下一篇 返回列表

文章素材均来源于网络,如有侵权,请联系管理员删除。