mybatis传递多个参数_深入浅出MyBatis:MyBatis解析和运行原理
原文:https://juejin.im/post/5abcbd946fb9a028d1412efc
本篇文章是「深入浅出MyBatis:技术原理与实践」书籍的总结笔记。
上一篇介绍了反射和动态代理基础,主要是为本篇文章做个铺垫,反射使配置和灵活性大大提高,可以给很多配置设置参数,动态代理可以在运行时创建代理对象,做一些特殊的处理。
文章索引:
- JDBC和MyBatis介绍
- MyBatis的所有配置
- 「映射器」全了解
- 反射和动态代理基础
- 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
mybatis传递多个参数_深入浅出MyBatis:MyBatis解析和运行原理相关推荐
- Mybatis传递多个参数的4种方式
现在大多项目都是使用Mybatis了,但也有些公司使用Hibernate.使用Mybatis最大的特性就是sql需要自己写,而写sql就需要传递多个参数.面对各种复杂的业务场景,传递参数也是一种学问. ...
- mybatis传递多个参数_Mybatis传递多个参数的4种方式(干货)
现在大多项目都是使用Mybatis了,但也有些公司使用Hibernate.使用Mybatis最大的特性就是sql需要自己写,而写sql就需要传递多个参数.面对各种复杂的业务场景,传递参数也是一种学问. ...
- MyBatis 传递多个参数
2019独角兽企业重金招聘Python工程师标准>>> 在MyBatis中可以用以下的方式来传递多个参数 1. 用java.util.Map来传递, Code 如下: public ...
- mybatis传递多个参数_MyBatis 映射器
ps 一个用于生成MyBatis配置文件的插件 mybatis-generator 使用方法呢, 是加入maven插件中 然后执行相关命令可以实现自动生成MyBatis配置文件 自动映射 首先编写无参 ...
- 关于向Mybatis传递多个参数进行SQL查询的用法
当只向xxxMapper.xml文件中传递一个参数时,可以简单的用"_parameter"来接收xxxMapper.java传递进来的参数,并代入查询,比如说这样: (1)xxxM ...
- mybatis 批量提交清除缓存_重学Mybatis(三)-------缓存 (含面试题)
博主将会针对Java面试题写一组文章,包括J2ee,SQL,主流Web框架,中间件等面试过程中面试官经常问的问题,欢迎大家关注.一起学习,一起成长,文章底部有面试题. mybatis的一级缓存 myb ...
- python socket读取数据不能解析_通过实例解析return运行原理,除了quot;生孩子quot;python真是无所不能啊...
文章内容主要介绍了通过实例解析Python return运行原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下!!! return 语句就是讲结果返 ...
- 潭州教育可以学python爬虫吗?_什么是爬虫?其运行原理是什么?只有Python才可以吗?...
爬虫是什么? 本文所说的爬虫不是自然界中的爬行动物,而是运行在网络中的一个自动处理信息的程序. 爬虫是一个程序,该程序利用网络请求(HTTP/HTTPS)进行数据的筛选和录入.因为网络信息维度很广泛, ...
- mybatis if test 判断参数_什么?你还在if判断参数?Spring Boot 注解进行参数校验真香...
一.依赖 org.springframework.bootspring-boot-starter-validation2.3.3.RELEASE 二.实体类 @TableField("use ...
最新文章
- java中的最终变量_在lambda表达式中使用的变量应该是最终变量或有效的最终变量。...
- linux查看并发量的命令
- 【学习笔记】opencv的python接口 几何变换
- VMM系列之VMM角色介绍以及创建运行方式账户
- 人生苦短,我用Python!
- Spring5 jar包下载
- 【每日一题】7月17日题目精讲—BOWL 碗的叠放
- 论文浅尝 | 基于多原型mention向量的文本-实体联合学习
- python list sort by,python中List的sort方法指南
- mockwebserver java_在Java中使用WireMock和SOAP Web服务
- 【转】[Python Tip]如何在Windows下方便地进入命令行运行程序
- 关于趋势科技防毒墙网络版的卸载
- Perl脚本 — 数字IC验证
- 华中科技大学计算机组成原理教材,2017华中科技大学《计算机组成原理》考研套装资料...
- php网易云信短信接口,短信接口指南
- 游吟诗人之中二病犯了
- RTX 3090 Ti和RX 6950 XT参数对比
- 【IPC通信】key_t键和ftok函数
- Vue 汉字转大写首字母(非汉字直接输出)
- Word学习笔记-使用技巧
热门文章
- idea搭建可运行Servlet的Web项目[maven]
- Android通知点击事件传递参数
- 支付宝 PEM routines:PEM_read_bio:no start line
- c语言之计算两个数的大数
- java ReentrantLock 使用
- WPF 绑定StaticResource到控件的方法
- (tmp 8) 0xff;
- BZOJ2302 [HAOI2011]Problem c 【dp】
- 08-SSH综合案例:前台用户模块:注册页面的前台JS校验
- ActiveReports 报表控件官方中文入门教程 (2)-创建、数据源、浏览以及发布