当前位置: 首页 > news >正文

MyBatis介绍和架构

MyBatis介绍

  1. MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,实质上Mybatis对ibatis进行一些改进。

  2. MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

  3. Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

Mybatis架构

  • mybatis配置
    SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
    mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。

  • 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂

  • 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。

  • mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。

  • Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。

  • Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。

  • Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。


  • 邮箱:ithelei@sina.cn
  • Good Luck!

相关文章:

  • JS 创建对象的5种写法
  • python之转义字符(学习笔记三)
  • 1015. 德才论 (25)
  • atitit. groupby linq的实现(1)-----linq框架选型 java .net php
  • Linux下安装MySQLdb模块(Python)
  • LWIP移植
  • G-Code 详解
  • umask值与Linux中文件和目录权限的关系
  • 2017-4-28 ListView控件
  • Vue2 第一天学习
  • 《Haskell趣学指南》—— 第2章,第2.2节Haskell的常见类型
  • awk 系列:如何使用 awk 的 ‘next’ 命令
  • 《深入浅出iPhone/iPad开发(第2版)》——你已经创建了自己的第一个iPhone应用程序!...
  • 十分钟搞清字符集和字符编码
  • 缓存失效竟然可以这么解决?
  • 【5+】跨webview多页面 触发事件(二)
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 08.Android之View事件问题
  • Brief introduction of how to 'Call, Apply and Bind'
  • co模块的前端实现
  • es6要点
  • JavaScript对象详解
  • JavaScript中的对象个人分享
  • java正则表式的使用
  • jquery ajax学习笔记
  • Linux gpio口使用方法
  • overflow: hidden IE7无效
  • Python 反序列化安全问题(二)
  • SpringBoot 实战 (三) | 配置文件详解
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 开发基于以太坊智能合约的DApp
  • 树莓派 - 使用须知
  • 双管齐下,VMware的容器新战略
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 我从编程教室毕业
  • 走向全栈之MongoDB的使用
  • 如何用纯 CSS 创作一个货车 loader
  • ​低代码平台的核心价值与优势
  • ​业务双活的数据切换思路设计(下)
  • #ifdef 的技巧用法
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • (6)设计一个TimeMap
  • (Ruby)Ubuntu12.04安装Rails环境
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (黑马C++)L06 重载与继承
  • (七)理解angular中的module和injector,即依赖注入
  • (一)u-boot-nand.bin的下载
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .net core 6 集成和使用 mongodb