首页 > 其他分享 >MyBatis加载Mapper映射文件的方式

MyBatis加载Mapper映射文件的方式

时间:2022-09-30 11:06:40浏览次数:46  
标签:Mapper configuration resource url && MyBatis null 加载


MyBatis加载Mapper的映射文件的方式

我们都知道MyBatis是一款半自动的ORM框架,它的特点就是具有灵活的sql操作

MyBatis是利用mapper的映射文件,来将数据库的中字段与Java的属性关联。完成对数据库的操作

问题来了,MyBatis加载Mapper映射文件的方式有几种?

观察MyBatis的底层源码发现

通过快速搜索​​XMLConfigMapper​​这个类,这是MyBatis底层封装的用于规范MyBatis核心配置文件的类

,在里面我们可以发现为什么MyBatis里有着严格的标签书写顺序。(不是我这里所说的)

往下找到**​​mapperElement ​​**这个方法

MyBatis加载Mapper映射文件的方式_加载

private void mapperElement(XNode parent) throws Exception {
if (parent != null) {
for (XNode child : parent.getChildren()) {
if ("package".equals(child.getName())) {
String mapperPackage = child.getStringAttribute("name");
configuration.addMappers(mapperPackage);
} else {
String resource = child.getStringAttribute("resource");
String url = child.getStringAttribute("url");
String mapperClass = child.getStringAttribute("class");
if (resource != null && url == null && mapperClass == null) {
ErrorContext.instance().resource(resource);
InputStream inputStream = Resources.getResourceAsStream(resource);
XMLMapperBuilder mapperParser = new XMLMapperBuilder(inputStream, configuration, resource, configuration.getSqlFragments());
mapperParser.parse();
} else if (resource == null && url != null && mapperClass == null) {
ErrorContext.instance().resource(url);
InputStream inputStream = Resources.getUrlAsStream(url);
XMLMapperBuilder mapperParser = new XMLMapperBuilder(inputStream, configuration, url, configuration.getSqlFragments());
mapperParser.parse();
} else if (resource == null && url == null && mapperClass != null) {
Class<?> mapperInterface = Resources.classForName(mapperClass);
configuration.addMapper(mapperInterface);
} else {
throw new BuilderException("A mapper element may only specify a url, resource or class, but not more than one.");
}
}
}
}
}

从这个方法中我们就可以发现mapper的加载方式共有四种:

  1. package
  2. resource
  3. url
  4. class

优先级,执行顺序也就自然明了

标签:Mapper,configuration,resource,url,&&,MyBatis,null,加载
From: https://blog.51cto.com/u_14957231/5725619

相关文章

  • MYBatis-动态SQL
    MyBatis动态SQL什么是动态SQL?官方给出动态SQL的解释是一个基于OGNL的表达式,MyBatis3替换了之前的大部分元素,大大精简了元素种类,现在要学习的元素种类比原来的一半还要少......
  • MyBatis批量修改-Oracel
    MyBatis批量修改再利用MyBatis操作Oracle实现批量的修改操做的时候,需要用到存储过程的知识点批量修改,不同于批量的插入,批量修改可以同时操作不同表,但是如何保证他们是在同......
  • MyBatis-Plus 条件查询器
    MyBatis-Plus剩余内容​​本篇的主要代码依赖于之前的通用Mapper和通用Service篇​​前两个星期忙着转正的事情,比较忙。所以快两个周每太更新博客,这周末抓紧时间把剩余的MP......
  • Vue面试题27:为什么要使用路由懒加载?(总结自B站up主‘前端杨村长’视频,仅供自用学习)
    这是一道应用题。当打包应用时,JavaScript包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问时才加载对应组件,这样就会更加......
  • SpringBoot之Mybatis开启SQL记录和Pagehelper
    配置mybatismybatis:#mapper路径mapper-locations:classpath:mapper/*.xmlconfiguration:#日志输出log-impl:org.apache.ibatis.logging.stdout.StdO......
  • MyBatis
    1.概念Mybatis是一款半ORM(对象关系映射)的持久层框架,支持定制化SQL、存储过程以及高级映射。避免了几乎所有的JDBC代码和手动设置参数及获取结果集。可以使用注解或......
  • Mybatis学习
    什么是Mybatis?看官网的定义:MyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的......
  • 秋色园QBlog技术原理解析:Module之基类生命周期-页面加载(七)
    文章回顾:1:​​秋色园QBlog技术原理解析:开篇:整体认识(一)​​--介绍整体文件夹和文件的作用2:​​秋色园QBlog技术原理解析:认识整站处理流程(二)​​--介绍秋色园业务处理......
  • Mybatis(2022-09-29)
    SSMSpringMVC+Spring+Mybatis3SpringMVC:充当的就是Servlet的角色。可以理解为SpringMVC是Spring的WEB支持。1Mybatis:充当的就是Dao层。2Spring:充当的时一个润滑油......
  • springboot+mybatis 双数据源配置
    maven依赖spring-boot-starter-webmybatis-spring-boot-startermysql-connector-javalombokapplication.ymlserver:port:8080#启动端口spring:datasource:......