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

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

Spring Boot集成MyBatis:注解与配置文件的协同作用

在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.yml中添加mybatis.mapper-locations=classpath:mapper/*.xml后,程序才能正常运行。这种现象引发了对这三种配置方式作用的疑问,它们似乎都指向Mapper接口的位置。

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

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

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

以上就是Spring Boot整合MyBatis:@Mapper、@MapperScan和mybatis.mapper-locations配置有何区别?的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2605884.html

(0)
上一篇 2025年3月6日 20:09:49
下一篇 2025年2月18日 00:34:46

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论