mybatis传递多个参数_深入浅出MyBatis:MyBatis解析和运行原理

原文:https://juejin.im/post/5abcbd946fb9a028d1412efc

bba418a23370742e930067a9a14cf433.png

本篇文章是「深入浅出MyBatis:技术原理与实践」书籍的总结笔记。

上一篇介绍了反射和动态代理基础,主要是为本篇文章做个铺垫,反射使配置和灵活性大大提高,可以给很多配置设置参数,动态代理可以在运行时创建代理对象,做一些特殊的处理。

文章索引:

  1. JDBC和MyBatis介绍
  2. MyBatis的所有配置
  3. 「映射器」全了解
  4. 反射和动态代理基础
  5. MyBatis插件和开发过程

本篇会介绍MyBatis解析和运行原理,下一篇介绍插件及应用,目的是更好地编写插件,通过本篇的介绍,你会了解到:

  • 构建SqlSessionFactory过程
  • 映射器的动态代理
  • SqlSession的4大对象
  • sql执行的过程

SqlSessionFactory和SqlSession是MyBatis的核心组件,在文章 JDBC和MyBatis介绍 中有详细说明。

构建SqlSessionFactory过程

构建主要分为2步:

  • 通过XMLConfigBuilder解析配置的XML文件,读出配置参数,包括基础配置XML文件和映射器XML文件;
  • 使用Configuration对象创建SqlSessionFactory,SqlSessionFactory是一个接口,提供了一个默认的实现类DefaultSqlSessionFactory。

说白了,就是将我们的所有配置解析为Configuration对象,在整个生命周期内,可以通过该对象获取需要的配置。

由于插件需要频繁访问映射器的内部组成,会重点这部分,了解这块配置抽象出来的对象:

MappedStatement

它保存映射器的一个节点(select|insert|delete|update),包括配置的SQL,SQL的id、缓存信息、resultMap、parameterType、resultType等重要配置内容。

它涉及的对象比较多,一般不去修改它。

SqlSource

它是MappedStatement的一个属性,主要作用是根据参数和其他规则组装SQL,也是很复杂的,一般也不用修改它。

BoundSql

对于参数和SQL,主要反映在BoundSql类对象上,在插件中,通过它获取到当前运行的SQL和参数以及参数规则,作出适当的修改,满足特殊的要求。

BoundSql提供3个主要的属性:parameterObject、parameterMappings和sql,下面分别来介绍。

parameterObject为参数本身,可以传递简单对象、POJO、Map或@Param注解的参数:

  • 传递简单对象(int、float、String等),会把参数转换为对应的类,比如int会转换为Integer;
  • 如果传递的是POJO或Map,paramterObject就是传入的POJO或Map不变;
  • 如果传递多个参数,没有@Param注解,parameterObject就是一个Map对象,类似这样的形式{"1":p1 , "2":p2 , "3":p3 ... "param1":p1 , "param2":p2 , "param3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430914.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux ps 进程组,linux进程管理(2)---进程的组织结构

一、目的linux为了不同的进程管理目的,使用了不同的方法组织进程之间的关系,为了体现父子关系,使用了“树形”图;为了对同一信号量统一处理,使用了进程组;为了快速查找某个进程,使用了哈希表&am…

统计建模与r软件_【统计建模与R软件笔记】008 描述统计量(1)

今天我们开始来学习描述统计量吧!位置的度量位置的度量就是用来描述定量资料的集中趋势的统计量,常用的有均值、众数、中位数、百分位数等。1.均值 mean( )形式:mean(x, trim 0, na.rm FALSE)x 是对象(如向量、矩阵、数组或数据框)trim 是计…

npm环境安装linux,Node.js环境在linux上的部署教程

我们以centOS为例来说说如何部署node.js环境一 打开centos,然后开始下载node.js包curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -yum -y install nodejs二 安装gcc环境yum install gcc-c make安装完成!三 安装nodejs的npm,这是一个包程序工具,类似于…

Nancy跨平台开发总结(三)发布到Jexus Web服务器

在Centos7上安装Mono yum install yum-utils rpm --import "http://keyserver.ubuntu.com/pks/lookup?opget&search0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF" yum-config-manager --add-repo http://download.mono-project.com/repo/centos/ yum install m…

stat函数_数据分析工具入门 掌握这些Excel函数就够了

1.什么是函数可以把函数理解为一个可以控制的黑箱子,输入X到黑箱子中,他就会输出Y,参数就是黑箱子的控制开关,打到不同的档位,黑箱子会输出不同的Y。2.常见函数分类文本清洗函数关联匹配函数逻辑运算函数计算统计函数时…

mysql获取当前时间毫秒_MySQL性能指标及计算方法

是新朋友吗?记得先点蓝字关注我哦~ 今日课程菜单 Java全栈开发 | Web前端+H5 大数据开发 | 数据分析 人工智能+Python | 人工智能+物联网 来源:小职(z_zhizuobiao) 找我:✅ 解锁高薪工作 ✅ 免费获取干货教程 未 完 待 续 绝大多数MySQL性能指标可以通过以下两种方式获取:…

哈希查找

哈希查找之前,我们要弄清楚哈希技术,哈希技术是在记录的存储位置和记录的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。查找时,根据这个确定的对应关系找到给定值的映射f(key),若查找集合中存在这…

fedora 安装Linux源码,如何在 Fedora 29/30 上安装 VS Code

Visual Studio Code 简称 VS Code 是微软开发的一款跨平台的源代码编辑器。 它具有内置的调试支持,嵌入式 Git 控件,语法突出显示,代码完成,代码重构和代码片段。Visual Studio Marketplace 提供了许多插件和扩展来扩展VS代码的功…

三菱伺服驱动器说明书_张家港市HG-KN13J-S100三菱伺服控制器

张家港市HG-KN13J-S100三菱伺服控制器MR-J2S1该产品还有RS-232和RS-422串行通讯功能,通过安装有伺服设置软件的个人计算机就能进行参数设定,试运行,状态显示和增益调整等操作。2与MR-J2S系列配套的伺服电机编码器采用了分辨率为131072脉冲/转…

Linux 禁用msi模式,通过禁用MSI模式解决Win10磁盘占用100%的方法

许多win10系统用户会在电脑中安装ssd固态硬盘,而在使用过程中经常会出现卡顿的情况,检查之后发现磁盘占用率100%,这是怎么回事呢,那么其实我们可以通过禁用MSI模式来解决,接下来给大家讲解一下通过禁用MSI模式解决Win1…

oracle jdbc jar包_Oracle总结之plsql编程(基础七)

紧接基础六,对oracle角色和权限的管理之后,在接下来的几次总结中来就最近工作中用过的plsql编程方面的知识进行总结,和大家分享!一、plsql块1、只包括执行部分的plsql块打开输出选项:set serveroutput on;b…

Visual Studio调试之断点基础篇

原文链接地址:http://www.cnblogs.com/killmyday/archive/2009/09/26/1574311.html 我曾经问过很多人,你一般是怎么调试你的程序的? F9, F5, F11, F…… 有很多书和文章都是介绍怎么使用Visual Studio编写WinForm啦,、ASP.NET之类的程序&…

[译] ASP.NET 生命周期 – ASP.NET 请求生命周期(三)

使用特殊方法处理请求生命周期事件 为了在全局应用类中处理这些事件,我们会创建一个名称以 Application_ 开头,以事件名称结尾的方法,比如 Application_BeginRequest。举个例子,就像 Application_Start 和 Application_End 方法&a…

linux用while循环输出1到10,Linux Shell系列教程之(十一)Shell while循环 | Linux大学...

摘要在上一篇Linux Shell系列教程之(十)Shell for循环中,我们已经对Shell 循环语句的for循环进行了介绍,本篇给大家介绍下Shell 中另一种循环语句:Shell while循环。在上一篇Linux Shell系列教程之(十)Shell for循环中,我们已经对…

sqlserver 触发器 update_运维日记| SQL server 那点事——DML触发器

各位新朋友~记得先点蓝字关注我哦~11月19日,21点,小编正六指霸屏,决赛圈1V4,忽然,电话响了,这种感觉很熟悉,不错,上次差点推掉对面水晶的那一幕又上演了……作…

linux fb应用例子,Linux下利用framebuffer画点的程序小例子

Linux下利用framebuffer画点的程序小例子:/** ** Filename: framebuffer.c** Description: linux下利用framebuffer画点的程序小例子** Version: 1.0* Created: 2011年02月25日 10时33分29秒* Revision: none* Compiler: …

pb利用datawindow查询符合条件的数据并且过滤掉其他数据_数据质量监测

1 Overview1.1 数据质量在数据部门里,数据质量问题经常是被动发现,所以数据质量的问题是大多数公司数据部门都不得不面对的问题。数据质量校验的目标是监控数据管道中,生产者、处理阶段以及消费者的数据的正确性、一致性和及时性的一项系统工…

将解决方案和项目放在同一目录中_借助卡第那思3D电子目录,巴鲁夫使用CAE数据扩展其产品目录...

巴鲁夫作为一家中型企业,1921年成立于毗邻斯图加特市的诺伊豪森,80年代初期直至后来很长的一段时间内,巴鲁夫是巴西第一家及唯一一家从事自主生产的传感器制造商。如今巴鲁夫不再仅仅位于诺伊豪森,而是遍布欧洲、亚洲、北美、南美…

python公式如何编写_如何编写 Python 程序,资深Python大咖教你玩转Python

如何编写Python程序,这从来就不是一件很难的事。下面我教你保存和运行 Python 程序的标准步骤,如下:对于 PyCharm 用户1. 打开 PyCharm。2. 以给定的文件名创建新文件。3. 输入案例中给出的代码。4. 右键并运行当前文件。注意:每当…

c语言学籍管理系统小程序,学籍业务办理系统(开源 v2.0发布 优化代码,增加小程序端)...

更新说明:1、此2.0版,大幅度优化代码,增加小程序端方便使用2、v1.0测试地址已关,请勿测试学生在校期间避免不了要和各种证明打交道,比如学籍证明、转专业申请、休学申请、退学申请等等。此类业务一般流程都是学生去找老…