【mybatis】- MyBatis 基础篇

前言
一直以来,很多人都是拿来主义,只停留在会使用的阶段,从未去研究挖掘其原理,剖析本质。现在慢慢探讨一下其内幕,抛砖引玉
一、简介
1)常用的持久化框架
Hibernate:是一款Java世界中最著名的ORM框架之一JPA(Java Persistence API): 是EJB 3 .0中持久化部分的规范,但它可以脱离EJB的体系单
独作为一个持久化规范进行使用
Spring JDBC:严格来说,Sring JDBC不能算是一个ORM架,它仅仅是使用模板方式对原生DBC行了一层非常薄的封装MyBatis:MyBatis前身是Apache基金会的开源项目iBatis,在 2010 年该项目脱离Apache基金会并正式更名为MyBatis
2)使用步骤
传统的
JDBC编程中的查询操作为例进行说明,其主要步骤如下:注册数据库驱动类 ,明确指定数据库URL地址、数据库用户名、密码等连接信息通过DriverManager打开数据库连接通过数据库连接创建Statement对象通过Statement对象执行SQL语句,得到ResultSet对象通过ResultSet读取数据,并将数据转换成JavaBean对象关闭ResultSet、Statement对象以及数据库连接,释放相关资源 java 操作数据库
使用
MyBatis,其主要步骤如下:配置mybatis-config.xml配置文件, 配置数据库的URL地址、数据库用户名和密码、别名信息、映射配置文件的位置以及一些全局配置信息应用程序首先会加载mybatis-config.xml配置文件井根据配置文件的内容创建SqlSessionFactory对象通过SqlSessionFactory对象创建SqlSession对象,SqlSession接口中定义了执行 SQL 语句所需要的各种方法通过SqlSession对象执行映射配置文件中定义的SQL语句,完成相应的数据操作通过SqlSession对象提交事务,关闭SqlSession对象
3)Mybatis 整体架构
整体结构图
一条 sql 大致的执行过程
① 基础支持层
反射模块
类型转换模块
日志模块:
资源加载模块
解析器模块
数据源模块:提供了与第三方数据源集成的接口,这些功能都位于数据源模块之中
事务管理:对数据库中的事务进行了抽象,其自身提供了相应的事务接口和简单实现,与
Spring框架集成,并由Spring框架管理事务,缓存模块
注意:
MyBatis中自带的这两级缓存与MyBatis以及整个应用是运行在同一个JVM中的,共享同一块堆内存。如果这两级缓存中的数据量较大, 则可能影响系统中其他功能的运行,所以当需要缓存大量数据时 ,优先考虑使用Redis、Memcache等缓存产品Binding模块:MyBatis通过Binding模块将用户自定义的Mapper接口与映射配置文件关联起来,系统可以通过调用自定义Mapper接口中的方法执行相应的SQL语句完成数据库操作,开发人员无须编写自定义Mapper接口的实现,MyBatis会自动为其创建动态代理对象
② 核心处理层
配置解析在
MyBatis初始化过程中,会加载mybatis-config.xml配置文件、映射配置文件以及Mapper接口中的注解信息,解析后的配置信息会形成相应的对象并保存到Configuration对象中SOL解析与scripting模块为了将开发人员从这项枯燥无趣的工作中解脱出来,MyBatis实现动态SQL语句的功能,提供了多种动态SQL语句对应的节点scripting模块会根据用户传入的实参,解析映射文件中定义的动态SQL节点,并形成数据库可执行的SQL语句 。之后会处理SQL语句中的占位符,绑定用户传入的实参SOL执行:语句的执行涉及多个组件 ,其中比较重要的是Executor、StatementHandler、ParameterHandler和ResulSetHandler,步骤如下:Executor主要负责维护一级缓存和二级缓存,并提供事务管理的相关操作 ,它会将数据库相关操作委托给StatementHandler完成StatementHandler首先通过ParameterHandler完成SQL语句的实参绑定,然后通过java.sql.Statement对象执行SQL语句并得到结果集最后通过ResultSetHandler完成结果集的映射,得到结果对象并返回插件:可以通过添加用户自定义插件的方式对
MyBatis进行扩展,用户自定义插件也可以改变Mybatis的默认行为
③ 接口层
接口层相对简单,其核心是
SqlSession接口,该接口中定义了MyBatis暴露给应用程序调用的API,也就是上层应用与MyBatis交互的桥梁。接口层在接收到调用请求时,会调用核心处理层的相应模块来完成具体的数据库操作
总结
本篇简单介绍了 MyBatis 整体架构及各层之间的功能。若要用好并深入,请关注下一篇原理剖析篇











评论