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+SQLite数据库实现的生词记事本功能。分享给大家供大家参考,具体如下:主activity命名为Dict:代码
- AsyncTask什么是AsyncTaskAsyncTask是一个轻量级的异步任务类,它可以在线程池中执行后台任务,然后把执行的进度和结果传
- 前言前面一篇我们介绍了使用 shared_preferences实现简单的键值对存储,然而我们还会面临更为复杂的本地存储。比如资讯类 App
- 虽然说模块通信、路由协议在Android已经不新鲜了,但是如果脱离了那些优秀的开源库我们从零开始自己造一个库,有时候重复造轮子会让自己对所谓
- 简介Android给我们提供了一种轻量级的异步任务类AsyncTask。该类中实现异步操作,并提供接口反馈当前异步执行结果及进度,这些接口中
- 很多学习Android程序设计的人都会发现每个人对代码的写法都有不同的偏好,比较明显的就是对控件响应事件的写法的不同。因此本文就把这些写法总
- 前言属于基础的面试问题,一定要能够回答全哦~一、继承Thread,重写run方法通过自定义一个类(这里起名为:MyThread),继承Thr
- 背景在接口请求过程中,传递json对象,springboot转换为实体VO对象后,所有属性都为null。post请求:后台接收请求:当时就懵
- 前言Mybatis真正强大的地方在于SQL映射语句,这也是它的魅力所在。相对于它强大的功能,SQL映射文件的配置却非常简单,我上篇文章语句讲
- 1. SpEL 回顾经过上篇文章的学习,小伙伴们已经知道了,在 Spring Security 中,@PreAuthorize、@PostA
- 最近有小伙伴问我,双枚举类该怎么写,还得包括根据key取值方法。于是就手写一个案例如下:/** * 关系类型枚举 */public enum
- startActivityForResult与startActivity的不同之处在于:1、startActivity( )仅仅是跳转到目标
- 传播inbound事件有关于inbound事件, 在概述中做过简单的介绍, 就是以自己为基准, 流向自己的事件, 比如最常见的channel
- 面试题1:说一下你对ReentrantLock的理解?ReentrantLock是JDK1.5引入的,它拥有与synchronized相同的
- OverView今天在复习的时候,突然复习到我们的相机操作,但是对于相机操作,对于我来说比较复杂的是对于权限的操作。所有我们需要对我们的相机
- 对于自定义注解这里就不唠叨了,百度一大堆,这里有我一个自定义注解@Retention(RetentionPolicy.RUNTIME)@Ta
- Java BufferWriter写文件之后文件是空的或者数据不全在编程的过程中,读写文件是非常常见的操作,在这里我问介绍一下最近我遇到的集
- 加载本地图片在项目目录下创建assets文件夹,再在其文件夹下创建images文件夹,后面将需要的图片复制到其中即可在pubspec.yam
- 最近在做项目开始,涉及到服务器与安卓之间的接口开发,在此开发过程中发现了安卓与一般浏览器不同,安卓在每次发送请求的时候并不会带上上一次请求的
- 本文以实例阐述了C++中形参与实参的区别,有助于读者加深对于C++形参与实参的认识。形参出现在函数定义中,在整个函数体内都可以使用, 离开该