mybatis中mapper-locations的作用
作者:还能坚持 发布时间:2023-11-10 18:02:58
mapper-locations的作用说明
1、mapper-locations
mapper-locations是一个定义mapper接口位置的属性,在xxx.yml或xxx.properties下配置,作用是实现mapper接口配置
2、使用场景
当mapper接口和mapper接口对应的配置文件在 命名上相同 、所在的路径相同,则mapper-locations可以不用配置,配置也不会生效。
如果mapper接口和mapper接口对应的配置文件在命名上不同或所在的路径不同,配置mapper-locations才能实现接口的绑定。实现mapper接口的绑定需要在配置文件中配置:
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
mapper接口:com.liuzeyu.mapper.UserMapper.java
mapper接口对应的配置文件:mapper.UserMapper.xml
3、补充
实现接口绑定还可以在mapper接口上,直接使用注解实现,类似:
mybatis.mapper-locations作用和Invalid bound statement (not found)错误
mybatis.mapper-locations作用:加载我们的mapper xml文件,用于解决当我们的mapper映射文件所在位置不同于mapper接口所在位置,如果位置相同就可以忽略这条代码
对应错误:mapper.xml没被加载到
环境:SpringBoot+Mybatis+MySQL
环境准备:
创建springboot 的demo
引入依赖和插件
逆向工程生成相应的pojo,mapper接口,mapper映射xml文件
逆向工程生成相应的pojo,mapper接口,mapper映射xml文件
创建controller层
以上1-5层,目录截图,期中 resources下的mybatis文件夹只是我用来存放逆向工程的配置文件(忽略)
编写application.properties
server.port=8080
server.servlet.context-path=/demo
spring.datasource.username=root
spring.datasource.password=
spring.datasource.url=jdbc:mysql://localhost:3307/studentdb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.profiles.active=dev
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
#mybatis.mapper-locations=classpath:com/example/demo/mapper1/*.xml
mybatis.type-aliases-package=com.example.demo.pojo
logging.level.com.example.demo.mapper=debug
logging.level.web=debug
注意:此时没有启用#mybatis.mapper-locations
接下来修改DemoApplication.java
在@SpringBootApplication 后面加注解
@MapperScan(“com.example.demo.mapper”)
扫描mybatis的相关文件,此时的作用是加载"com.example.demo.mapper"下的mapper接口,如果对应的mapper映射文件恰好所在的目录是在resources下的"com.example.demo.mapper",那么xml映射文件也会被
加载到配置中,此时mapper接口和xml文件恰好同放在"com.example.demo.mapper"中
在controller层编写controller调用 mapper 访问数据库查询信息
@Controller
@RequestMapping("student")
public class StudentController {
@Autowired
StudentMapper studentMapper;
@RequestMapping("/listStudents")
public String getStudentList(@RequestParam(defaultValue = "1",value = "page")int page, HttpServletRequest request){
List<Student> list = studentMapper.selectByExample(new StudentExample());
request.setAttribute("list",list);
return "student/listStudents";
}
}
运行,显示成功
如果我们的mapper接口和mapper映射文件不在相同的目录下 该案例同为"com.example.demo.mapper",则xml映射文件不能被加载到
我们把xml映射文件所在的文件夹改为mapper1
然后重启项目,访问地址,报错
Failed to complete request: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.example.demo.mapper.StudentMapper.selectByExample
由于xml所在路径不同于mapper接口的所在路径,所以xml映射文件没被读取到,调用的时候就自然报错,解决路径不同的读取方法:
mybatis.mapper-locations
回到application.properties,我们加入一行:
mybatis.mapper-locations=classpath:com/example/demo/mapper1/*.xml
(我自己打开注释)
这一行代码的作用是加载我们的mapper xml文件,用于解决当我们的mapper映射文件所在位置不同于mapper接口所在位置,如果位置相同就可以忽略这条代码
指定了xml的新位置(com/example/demo/mapper1)后,重启再次访问就成功了,
注意resources下的目录路径是以"/“为分隔,而不是.,java下的才是”."
来源:https://blog.csdn.net/qq_35091353/article/details/119802245


猜你喜欢
- Android 实现代码混淆的实例1、简介代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,
- 本文实例讲述了java实现切割wav音频文件的方法。分享给大家供大家参考,具体如下:import it.sauronsoftware.jav
- 好了下面进入正题,我们先看一下实现效果吧:下面来介绍一下代码: 本思路就是:1.先到手机中扫描jpeg和png的图片2.获取导图片
- 分组类控件主要包括容器控件(Panel),分组框控件(groupBox)和选项卡控件(TabControl)等控件。一、Panel控件Pan
- 本文实例为大家分享了Android实现文字下方加横线的具体代码,供大家参考,具体内容如下public class WhiteTextview
- 一. 思路今天接到个小任务,让把json文件转换成excel文件,按照列展开.思路:既然json已经都已经是现成的,那直接将jso
- ResultSet 动态获取列名和值仅供自己方便查阅,无其他用途ResultSet result = null; //前边SQL查询结果,这
- 前 言终于来到下篇了,通过上篇,和中篇,我们了解了linq的基本语句,对应linq我们又了解到lambda表达式,静态扩展方法,以及linq
- 前一段时间,在做摄像头拍照上传,摄像头拍的照片为base64编码格式的字符串,需要上传至项目中,则需要使用到将base64编码字符串转换为图
- checkpoint 机制的具体实现我们都知道为了优化分布式存储系统中 NameNode 的重启性能,我们引进了 checkpoint 机制
- 1.问题描述汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚
- 常用事件的分类Java AWT里面的事件可以简单的分为窗体事件(WindowEvent),鼠标事件(MouseEvent),键盘事件(Key
- 在JAVA克隆对象不能简单的使用clone方法,clone方法只是进行浅克隆。请看下方:深度克隆类:Java代码 import java.i
- FeignClient发送post请求异常这个问题其实很基础。但是却难倒了我。记录一下在发送post请求的时候要指定消息格式正确的写法是这样
- 本文实例讲述了Android判断设备网络连接状态及判断连接方式的方法。分享给大家供大家参考,具体如下:在Android开发过程中,对于一个需
- 什么是线程池是一种基于池化思想管理线程的工具。池化技术:池化技术简单点来说,就是提前保存大量的资源,以备不时之需。比如我们的对象池,数据库连
- 使用的场景常常遇到一些项目中多环境切换的问题。比如在开发过程中用到开发环境,在测试中使用测试环境,在生产中用生产环境的情况。springbo
- ps:我用的版本是7.0.5场景:左侧第一列宽度不够,导致数据换行。Table table = new Table(new float[2]
- 首先看一看什么是装箱和拆箱?简单的来说:装箱就是值类型转换为引用类型;拆箱就是引用类型转换为值类型。值类型,包括原类型(Sbyte、Byte
- 什么是有序性在开发中,我们通常按照从上到下的顺序编写程序指令,并且希望cpu和编译器按照我们预先编写的顺序去执。但往往cpu和编译器为了提高