MyBatis的解析和运行原理
一、mybatis的运行分为两大部分
1、读取配置文件到缓存到configuration对象,用以创建SqlSessionFactory。
2、SqlSession的执行过程
二、构件SqlSessionFactory的过程
①通过XMLConfigBuilder解析配置的XML文件,读出配置参数,并将读取的数据存入Configuration类中。
②使用Configuration对象创建SqlSessionFactory。
1-1构建Configuration
作用:读取配置文件,包括基础配置的XML文件和映射器的XML文件
初始化基础配置
提供单例
执行一些重要的对象方法,初始化配置对象
通过XMLConfigBuilder构建的。
1-2映射器的内部组成
一般而言,一个映射器是由三个部分组成的
①MappedStatement,它保存映射器的一个节点。包括我们配置的SQL、SQL的id、缓存信息、resultMap、parameterType、resultType、
languageDriver等重要配置内容。
②SqlSource,它是提供BoundSql对象的地方,它是MappedStatement的一个属性。
③BoundSql,它是建立sql和参数的地方。它有三个常用的属性:SQL、parameterObject、parameterMappings。(对BoundSql进行适当修改满足我们的需求)
parameterObject为参数本身。
parameterMappings,描述我们的参数;参数包括属性、名称、表达式、javaType、jdbcType、typeHandler等重要信息。 (PreparedStatement能够通过它找到parameterObject对象的属性并设置参数)
sql,书写在映射器中的sql语句
三、SqlSession的运行过程
Mapper映射是通过动态代理实现的。Mapper的执行过程是通过Executor、StatementHandler、ParameterHandler和ResultHandler来完成数据库的操作和返回结果。
Executor,执行器,由他来调度StatementHandler、ParameterHandler、ResultHandler
StatementHandler,使用数据库的statement执行操作
ParameterHandler,Sql对参数的处理
ResultHandler,对最后的数据集的封装返回处理。
3-1执行器
mybatis将根据配置类型去确定你要创建三种执行器中的哪一种。BatchExecutor、ReuseExecutor、SimpleExecutor
根据Configuration来构建StatementHandler,调用StatementHandler的prepare()进行预编译和基础设置,然后通过StatementHandler的parameterize()来设置参数,resultHandler再组装查询结果返回给调用者完成一次查询。
3-2数据库会话器
StatementHandler也分为三种。 SimpleStatementHandler 、PreparedStatementHandler 、CallableStatementHandler