Mybatis简介:

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。本文将通过debug的方式来了解其工作原理。

Mybatis核心类:

SqlSessionFactory:每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或通过Java的方式构建出 SqlSessionFactory 的实例。SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,建议使用单例模式或者静态单例模式。一个SqlSessionFactory对应配置文件中的一个环境(environment),如果你要使用多个数据库就配置多个环境分别对应一个SqlSessionFactory。

SqlSession:SqlSession是一个接口,它有2个实现类,分别是DefaultSqlSession(默认使用)以及SqlSessionManager。SqlSession通过内部存放的执行器(Executor)来对数据进行CRUD。此外SqlSession不是线程安全的,因为每一次操作完数据库后都要调用close对其进行关闭,官方建议通过try-finally来保证总是关闭SqlSession。

Executor:Executor(执行器)接口有两个实现类,其中BaseExecutor有三个继承类分别是BatchExecutor(重用语句并执行批量更新),ReuseExecutor(重用预处理语句prepared statements),SimpleExecutor(普通的执行器)。以上三个就是主要的Executor。通过下图可以看到Mybatis在Executor的设计上面使用了装饰者模式,我们可以用CachingExecutor来装饰前面的三个执行器目的就是用来实现缓存。

MappedStatement:MappedStatement就是用来存放我们SQL映射文件中的信息包括sql语句,输入参数,输出参数等等。一个SQL节点对应一个MappedStatement对象。

Mybatis工作流程:

阅读全文有惊喜哦!!!

下面将通过debug方式对Mybatis进行一步步解析。首先贴出我的mybatis-config.xml文件以及Mapper.xml文件。

<?xml version="1.0" encoding="UTF-8" ?><?xml version="1.0" encoding="UTF-8" ?> select * from user  User where id = #{id}  insert into User (username,birthday,sex,address) values (#{name},#{birthday},#{sex},#{address})  update User set username = #{username},birthday = #{birthday}, sex = #{sex},address = #{address} where id = #{id}  delete from User where id = #{id}  select * from User where sex = #{param1}   and username like #{param2} and address = #{parma3} select count(*) from user where username like #{username}  username like #{pattern}  and sex = #{sex}  and address = #{address}  where id in 

mybatis 原理_Mybatis工作流程及其原理与解析相关推荐

  1. mybatis+springMVC+spring原理及工作流程

    做自己没做过的事情叫做成长 做自己不愿做的事情叫做改变 做自己不敢做的事情叫做突破 共勉 引言 本人在学习ssm中,已经能熟练的编写配置文件与代码了.但于前几天朋友问其原理与工作流程时却只能答出一二, ...

  2. k8s创建pod加入容器_K8S架构原理及其工作流程

    K8S 容器编排系统 容器编排系统需要满足的条件: 服务注册,服务发现 负载均衡 配置.存储管理 健康检查 自动扩缩容 零宕机 K8S整体架构图 K8S整体架构 Kubernetes采用主从分布式架构 ...

  3. redux的原理、工作流程及其应用

    redux的原理.工作流程及其使用 Redux对于JavaScript应用而言是一个可预测状态的容器.换言之,它是一个应用数据流框架,而不是传统的像underscore.js或者AngularJs那样 ...

  4. ceph原理及工作流程浅析

    ceph工作原理及工作流程浅析 其命名和UCSC(Ceph诞生地)的吉祥物有关,这个吉祥物是"Sammy",一个香蕉色的蛞蝓,就是头足类中无壳的软体动物.这些有多触角的头足类动物, ...

  5. 【SEO学习】第一步:了解搜索引擎基本工作原理和工作流程

    我们常用的搜索引擎一般都是百度.谷歌.搜狗.360.bing这五种,对于搜索引擎的原理和工作流程应该是一样的.今天郑州SEO老冯先给大家说一下百度搜索引擎的工作原理以及抓取过程.这是SEO学习的第一步 ...

  6. mybatis返回某一字段_8.mybatis的基本工作流程(2.0)※

    mybatis的基本工作流程 1.读取配置文件,配置文件包含数据库连接信息和Mapper映射文件或者Mapper包路径. 2.有了这些信息就能创建SqlSessionFactory,SqlSessio ...

  7. Mybatis体系结构及工作流程

    相关内容: 架构师系列内容:架构师学习笔记(持续更新) Mybatis工作流程 首先在MyBatis 启动的时候我们要去解析配置文件,包括全局配置文件和映射器配置文件,这里面包含了我们怎么控制MyBa ...

  8. Struts2的工作原理及工作流程

    众所周知,Struts2是个非常优秀的开源框架,我们能用Struts2框架进行开发,同时能 快速搭建好一个Struts2框架,但我们是否能把Struts2框架的工作原理用语言表达清楚,你表达的原理不需 ...

  9. DLP投影机投影技术之成像原理与工作流程

    DLP是数字光处理(Digital Light Processing)的缩写,是一项使用于投影仪和背投电视中的显像技术. DLP投影仪成像原理         DLP投影仪的成像原理是将通过UHP灯泡 ...

最新文章

  1. jquery 添加 padding_【开发小技巧】11—如何使用JavaScript / jQuery为网站创夜间/高亮模式?...
  2. 【Splay】【块状链表】bzoj3223 Tyvj 1729 文艺平衡树
  3. [转载] 基于LSTM的股票预测模型_python实现_超详细
  4. 装完金蝶电脑无限重启_金蝶财务软件快捷键大全,提高工作效率!
  5. 计算机网络管理2018版,2018~2019学年度第二学期“计算机网络管理”专业技能竞赛火热进行中...
  6. 基于行跟踪的ROWDEPENDENCIES ORA_ROWSCN信息
  7. DIV+CSS样式表命名的规则方法
  8. wgan 不理解 损失函数_GAN损失函数||WGAN
  9. CSS/HTML/JS
  10. matlab语音合成技术,基于MATLAB的语音处理 语音合成..doc
  11. 信息搜集方法小结(持续更新)
  12. element中el-select实现拼音搜索(el-autocomplete等下拉框搜索都可添加)
  13. 哈罗选了个好时点上线顺风车业务,但很可能雷声大雨点小
  14. python量化策略——多均值-趋势-股债轮动-策略
  15. 汉语计算机语言,汉语是唯一可用于计算机时代的语言!
  16. c语言中ch1和ch2是什么意思,2020-05-26(C语言)1.将串str中所有值为ch1的字符转换成ch2的字符,如果str为空串,或者串中不含值为ch1的字符,则什么都不做.2.逆转函数...
  17. socks5代理IP的几种测试工具
  18. 《GTD I》读书笔记
  19. 个人常用的sql脚本语句
  20. 关于用盐去黑头的亲身经历~ - 生活至上,美容至尚!

热门文章

  1. 理解Promise规范
  2. TensorFlow学习笔记(三)模型的基本步骤
  3. JVM性能调优中的命令总结
  4. ArcGis中空间连接join
  5. MySQL_列值为null对索引的影响
  6. linux每日命令(30):Linux 用户及用户组相关文件、命令详解
  7. 梭子鱼智能安全透视平台揭穿精密伪装威胁
  8. 为什么你的应用程序需要崩溃
  9. Android 4.4(KitKat)中的设计模式-Graphics子系统
  10. 【小议】centos与ubuntu的区别