MyBatis源码(二)如何执行sql

news/2025/1/12 4:07:18/

前言

接着environmentElement获取数据源信息后,同级执行代码的mappersElement。

Mybatis源码(三)如何操作数据库

MyBatis源码(二)如何执行sql

Mybatis源码(一)获取数据源

结构小结

分析main函数:

public class MybatisMain {public static void main(String[] args) throws IOException {String resource = "mapper/config/mybatis-config.xml"; //全局配置InputStream is = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);SqlSession session = sqlSessionFactory.openSession();OrderPojo orderPojo = session.selectOne("com.cbry.mybatis.OrderDao.findSimpleOrderInfo" , 0);System.out.println(orderPojo);}
}

我们将一条简单SQL的执行分为三个部分:

  1. Mybatis是如何获取数据库源
  2. Mybatis是如何获取SQL
  3. Mybatis是如何操作数据库

获取SQL

对应代码

//setEnvironment
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);

在这里插入图片描述

四种mapper的优先级

同理其它如mapper,这里也可以看来四种mapper的优先级:package > resource > url > calss

后面的源码过长,不截图了。

在这里插入图片描述

this.buildStatementFromContext(context.evalNodes("select|insert|update|delete"));中有解析select标签代码。入参是list:List list

在这里插入图片描述

在这里插入图片描述

遍历buildStatementFromContext里面的List ,进行解析,最终存放在一个configuration里面。这里于上文获取数据源是同一个。

在这里插入图片描述

在这里插入图片描述

context获取mapper

mapper的属性获取: boolean - > 值获取。

往下找,注意到这里是addMappedStatement , 因为是List,要多次加入,最后集成返回XMLStatementBuilder对象

在这里插入图片描述

这里我们将所获取的属性,集成一个类:也就是源码映射的标签都有一个对应的类与之对应:

在这里插入图片描述

由此我们获取到了执行SQL。

后续

获取SQL后如何通过执行器执行sql并返回映射

小结

Mybatis是如何获取SQL

在这里插入图片描述


http://www.ppmy.cn/news/7214.html

相关文章

12. 目前常用的四种信道复用方式:()、()、()和() ---- 计算机网络

目前常用的四种信道服用方式:(频分复用)、(时分复用)、(码分复用)和(波分复用) 知识点 复用(multiplexing):就是在一个信道上传输多路…

Serivice案例

Serivice启动方式案例 1.案例1:-start方式启动 1.1创建服务 //服务类 public class MyService extends Service {//创建服务调用一次Overridepublic void onCreate() {System.out.println("onCreate");Toast.makeText(this, "onCreate", Toast.…

Codeforces Round #839 (Div. 3) C. Different Differences

Problem - C - Codeforces 题意: 给定n和k,让你构造一个长度为k的数列,使其差分数组的数的种类尽可能多 思路: 贪心构造 种类尽可能多,那就让1 ,1之后2,3,....一直加&#xff0…

Python接口测试实战1(下)- 接口测试工具的使用

本节内容 抓包工具的使用Postman的使用 抓包工具的使用 抓包工具简介 Chrome/Firefox 开发者工具: 浏览器内置,方便易用Fiddler/Charles: 基于代理的抓包,功能强大,可以手机抓包,模拟弱网,拦截请求,定制…

开发者百宝箱——DevToys

开发者百宝箱——DevToys 文章目录 简介安装转换类型编码/解码格式化生成器文本处理图片设置参考文献 简介 DevToys 是一个开发人员的工具箱,基于 UWP 开发,免费开源无广告,支持中文,功能有: 转换类型 JSON / YAML…

画家创建百度百科词条的六注意事项你都了解吗!

百度百科是百度旗下的产品,随着百度百科审核机制越来越严格,百度百科的可信度也随之提高。 我们在日常中会遇到一些不懂的东西或者是想要了解一个人,下意识都会去浏览器搜索一下,出来的最上面的内容一般都是百度百科。 画家为什么…

华为开源自研AI框架昇思MindSpore数据处理:性能优化

目录一、环境准备1.进入ModelArts官网2.使用CodeLab体验Notebook实例二、下载数据集三、数据加载性能优化四、shuffle性能优化五、数据增强性能优化六、操作系统性能优化七、自动数据加速八、数据异构加速数据是整个深度学习中最重要的一环,因为数据的好坏决定了最终…

【JavaScript】23_浅拷贝和深拷贝 + 对象的复制 + 数组的常用方法

7、浅拷贝和深拷贝 浅拷贝(shallow copy) 通常对对象的拷贝都是浅拷贝浅拷贝顾名思义,只对对象的浅层进行复制(只复制一层)如果对象中存储的数据是原始值,那么拷贝的深浅是不重要浅拷贝只会对对象本身进行…