mybatis的运行过程

mybatis运行过程

mybatis的运行过程分为两大步:

  1. 读取配置文件缓存到Configuration对象,用以创建SqlSessionFactory;
  2. SqlSession的执行过程。

SqlSessionFactory是Mybatis的核心类之一,其最重要的作用是提供创建Mybatis的核心接口SqlSession。Mybatis采用Builder模式创建SQLSessionFactory,实际种通过SQLSessionFactoryBuilder去构建,分为两步:

  • 通过XMLConfiguration解析xml配置文件,读取所配置的参数,并将读取的内容存入Configuration类对象中。而Configuration采用的是单例模式,Mybatis的所有配置内容都会存储在这个单例对象中。
    Configuration的主要作用有:
    1)读入配置文件,包括基础配置和映射器配置
    2)初始化一些基础配置,如Mybatis的别名、typeHandler等
    3)提供单例,用于创建后续的SessionFactory等
  • 使用Configuration对象去创建SqlSessionFactory。它有一个默认的实现类DefaultSQLSessionFactory,实际中,没有必要再去创建一个SqlSessionFactory.

映射器的内部组成

Mybatis中一条sql和它相关的配置信息由三部分组成:MapperedStatement/SqlSource/BoundSql

  • MapperedStatement的作用是保存一个映射器节点(select|insert|update|delete)的内容,包括id、缓存信息、resultMap、parameterType等重要配置内容。
  • SqlSource是提供BoundSql的地方,它是MapperedStatement的一个属性,他本身是一个接口,只有getBoundSql一个方法,
    主要作用是根据上下文和参数解析生成需要的sql.
  • BoundSql是一个结果对象,包括解析得到的sql和参数,它有三个属性:parameterMappings、parameterObject和sql

BoundSql中最重要的属性是parameterObject,该参数可以传递简单对象、POJO或者Map、@Param注解的参数

  • 传递简单对象,包括int/long等基础类型,Mybatis会将他们转换为包装类对象
  • 传递POJO或者Map,parameterObject就是传入的传递POJO或者Map
  • 传递多个参时, 如果没有@Param,Mybatis会把parameterObject变成一个Map

SqlSession下的四大对象

SQLSession的执行时通过Executor、StatementHandler、ParameterHandler、ResultSetHandler来完成数据库操作和结果返回的。

  • Executor代表执行器,由他来调度另外三个核心组件,SqlSession其实是一个门面,真正干活的是Executor,它是一个真正执行java和数据库交互的对象;
  • StatementHandler是四大对象的核心,用它来实现prepare以及crud操作;
  • ParameterHandler用来处理sql参数;
  • ResultSetHandler用来进行结果集的封装和返回处理。

猜你喜欢

转载自blog.csdn.net/chang_li/article/details/79594157