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

本篇文章是「深入浅出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

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

  1. Mybatis传递多个参数的4种方式

    现在大多项目都是使用Mybatis了,但也有些公司使用Hibernate.使用Mybatis最大的特性就是sql需要自己写,而写sql就需要传递多个参数.面对各种复杂的业务场景,传递参数也是一种学问. ...

  2. mybatis传递多个参数_Mybatis传递多个参数的4种方式(干货)

    现在大多项目都是使用Mybatis了,但也有些公司使用Hibernate.使用Mybatis最大的特性就是sql需要自己写,而写sql就需要传递多个参数.面对各种复杂的业务场景,传递参数也是一种学问. ...

  3. MyBatis 传递多个参数

    2019独角兽企业重金招聘Python工程师标准>>> 在MyBatis中可以用以下的方式来传递多个参数 1. 用java.util.Map来传递, Code 如下: public ...

  4. mybatis传递多个参数_MyBatis 映射器

    ps 一个用于生成MyBatis配置文件的插件 mybatis-generator 使用方法呢, 是加入maven插件中 然后执行相关命令可以实现自动生成MyBatis配置文件 自动映射 首先编写无参 ...

  5. 关于向Mybatis传递多个参数进行SQL查询的用法

    当只向xxxMapper.xml文件中传递一个参数时,可以简单的用"_parameter"来接收xxxMapper.java传递进来的参数,并代入查询,比如说这样: (1)xxxM ...

  6. mybatis 批量提交清除缓存_重学Mybatis(三)-------缓存 (含面试题)

    博主将会针对Java面试题写一组文章,包括J2ee,SQL,主流Web框架,中间件等面试过程中面试官经常问的问题,欢迎大家关注.一起学习,一起成长,文章底部有面试题. mybatis的一级缓存 myb ...

  7. python socket读取数据不能解析_通过实例解析return运行原理,除了quot;生孩子quot;python真是无所不能啊...

    文章内容主要介绍了通过实例解析Python return运行原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下!!! return 语句就是讲结果返 ...

  8. 潭州教育可以学python爬虫吗?_什么是爬虫?其运行原理是什么?只有Python才可以吗?...

    爬虫是什么? 本文所说的爬虫不是自然界中的爬行动物,而是运行在网络中的一个自动处理信息的程序. 爬虫是一个程序,该程序利用网络请求(HTTP/HTTPS)进行数据的筛选和录入.因为网络信息维度很广泛, ...

  9. mybatis if test 判断参数_什么?你还在if判断参数?Spring Boot 注解进行参数校验真香...

    一.依赖 org.springframework.bootspring-boot-starter-validation2.3.3.RELEASE 二.实体类 @TableField("use ...

最新文章

  1. java中的最终变量_在lambda表达式中使用的变量应该是最终变量或有效的最终变量。...
  2. linux查看并发量的命令
  3. 【学习笔记】opencv的python接口 几何变换
  4. VMM系列之VMM角色介绍以及创建运行方式账户
  5. 人生苦短,我用Python!
  6. Spring5 jar包下载
  7. 【每日一题】7月17日题目精讲—BOWL 碗的叠放
  8. 论文浅尝 | 基于多原型mention向量的文本-实体联合学习
  9. python list sort by,python中List的sort方法指南
  10. mockwebserver java_在Java中使用WireMock和SOAP Web服务
  11. 【转】[Python Tip]如何在Windows下方便地进入命令行运行程序
  12. 关于趋势科技防毒墙网络版的卸载
  13. Perl脚本 — 数字IC验证
  14. 华中科技大学计算机组成原理教材,2017华中科技大学《计算机组成原理》考研套装资料...
  15. php网易云信短信接口,短信接口指南
  16. 游吟诗人之中二病犯了
  17. RTX 3090 Ti和RX 6950 XT参数对比
  18. 【IPC通信】key_t键和ftok函数
  19. Vue 汉字转大写首字母(非汉字直接输出)
  20. Word学习笔记-使用技巧

热门文章

  1. idea搭建可运行Servlet的Web项目[maven]
  2. Android通知点击事件传递参数
  3. 支付宝 PEM routines:PEM_read_bio:no start line
  4. c语言之计算两个数的大数
  5. java ReentrantLock 使用
  6. WPF 绑定StaticResource到控件的方法
  7. (tmp 8) 0xff;
  8. BZOJ2302 [HAOI2011]Problem c 【dp】
  9. 08-SSH综合案例:前台用户模块:注册页面的前台JS校验
  10. ActiveReports 报表控件官方中文入门教程 (2)-创建、数据源、浏览以及发布