MyBatis学习笔记

最近在学习MyBatis,做一些笔记以作记录。图片来自青山老师。

什么是ORM?

ORM的全拼是Object Relational Mapping,也就是对象与关系的映射,对象是程序里边的对象,关系是它与数据库里边的数据的关系。
在这里插入图片描述

MyBatis的核心特性

  • 使用连接池对连接进行管理
  • SQL和代码分离,集中管理
  • 结果映射集
  • 参数映射和动态SQL
  • 重复SQL的提取
  • 缓存管理
  • 插件机制

MyBatis核心对象

SqlSessionFactoryBuilder:用来构建SqlSessionFactory的,而且只会构建一个,构建完成后,无存在意义。它的生命周期只存在于方法的局部。

SqlSessionFactory:这是用来创建SqlSession的,每次访问数据库,都需要一个会话。所以这个类要一直再存(作用域是应用作用域),而且是单例模式。

SqlSession:只是一个会话,因为是线程不安全的,不能线程间共享。所以我们在请求开始的时候创建一个SqlSession对象,在请求结束后或者说方法执行完毕的时候要及时关闭它(一次请求或操作中)。

Mapper:是从SqlSession中获取的(实际上是一个代理对象)

在这里插入图片描述
#和$的区别?

  1. $方式不会对符合转义,不能防止SQL注入
  2. $方式没有预编译,不会缓存

所以能用#的地方都要用#;常量的替换,比如排序条件中的字段名称,不用加单引号,可以用$

MyBatis工作流程

  1. 解析配置文件
    把所有的配置文件解析成一个Configuration对象。
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory factory =new SqlSessionFactoryBuilder().build(inputStream);

通过InputStream获取到配置文件,然后通过XMLConfigBuilder把所有的配置文件都解析了,并放入到一个Configuration类中。再通过new一个DefaultSqlSessionFactory加载拿到的Configuration类。
在这里插入图片描述

  1. 提供操作接口
SqlSession sqlSession = factory.openSession();

先从Configuration中拿到Environment,里边包含事务工厂,再创建执行器(Executor),BaseExecutor有3个实现,分别是BatchExecutor,ReuseExecutor,SimpleExecutor,体现了模板方法模式。CacheExecutor则是Executor的装饰,体现了装饰器模式。再去进行插件的代理。最终返回一个DefaultSqlSession。
在这里插入图片描述

  1. 执行SQL操作
    根据XXMapper接口获取到一个代理对象。最底层为JDK代理。
    在这里插入图片描述
    然后执行sql,SqlSession持有一个Executor对象,用来封装对数据库的操作。在这里插入图片描述
    整体的执行流程
    在这里插入图片描述

按照包进行分类

在这里插入图片描述

接口层:

核心对象是SqlSession,它是上层应用和MyBatis打交道的桥梁,SqlSession上定义了非常多的数据库的操作方法。接口层在接收到调用请求的时候,会调用核心处理层的相应模块来完成具体的数据库操作。

核心处理层:

  1. 把接口中传入的参数解析并且映射成JDBC类型。
  2. 解析xml文件中的SQL语句,包括插入参数,和动态SQL的生成。
  3. 执行sql语句。
  4. 处理结果集,并映射成java对象。

基础支持层:

主要是一些抽取出来的通用的功能(实现复用),用来支持核心处理层的功能。

MyBatis中基本的执行器

BaseExecutor
SimpleExecutor
ReuseExecutor

四大对象

statementHandler
parameterHandler
resultSetHandler
Executor

MyBatis核心对象

对象相关对象作用
ConfigurationMapperRegistry
TypeAliasRegistry
TypeHandlerRegistry
包含了MyBatis的所有配置信息
SqlSessionSqlSessionFactory
DefaultSqlSession
对操作数据库的增删改查的API进行了封装,
提供给高层使用
ExecutorBaseExecutor
SimpleExecutor
BatchExecutor
ReuseExecutor
MyBatis的执行器,是MyBatis调度的核心
,负责SQL语句的生成和查询的维护
StatementHandlerBaseStatementHandler
SimpleStatementHandler
PreparedStatementHandler
CallableStatementHandler
封装了JDBC Statement操作,
负责对JDBC statement的操作,如设置参数、将Statement结果转换为List等
ParameterHandlerDefaultParameterHandler把用户传递的参数转换成JDBC statement所
需要的参数
ResultSetHandlerDefaultResultSetHandler把JDBC返回的ResultSet结果集封装成List类型的集合
MapperProxyMapperProxyFactory触发管理类,用于代理Mapper接口方法
MappedStatementSqlSource, BoundSqlMappedStatement维护了一条<select|update|delete|insert>节点的封装,表示了一条SQL,包括了SQL信息,入参信息,出参信息

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值