MyBatis整体架构

Mybatis整体架构

基础支持层

  • 反射模块

    Java中的反射很强大,但是还是需要封装的。MyBatis专门提供了反射模块,对元素的反射进行了封装,提供了简洁的API,对反射进行了优化,例如缓存了类的元数据,提高反射操作的性能。

  • 类型转换模块

    MyBatis提供了别名机制,该机制是类型转换的主要功能之一。类型转换的另一个功能是实现JDBC类型和Java类型之间的转换。在为SQL语句绑定实参是,会将数据由java类型转为JDBC类型;在映射结果集时,会将数据由JDBC转为Java类型。

  • 日志模块

    在开发测试/上线环境中,都需要日志。可以继承第三方日志框架:

    如:Log4j、Log4j2、slf4j等

  • 资源加载模块

    对类加载器进行封装,确定类加载器的使用顺序,提供了加载类文件和其他资源文件的功能

  • 解析器模块

    • 对Xpath进行封装,为解析mybatis-config.xml,mapper文件提供支持;
    • 为处理动态SQL语句中的占位符提供支持
  • 数据源模块

  • 事务模块

    MyBatis对数据库中的事务进行了抽象,提供了相应的事务接口和简单实现。

  • 缓存模块

    MyBatis提供了一级缓存和二级缓存。MyBatis自带的这两级缓存与MyBatis以及整个应用是运行在同一个JVM中,共享内存。所以当数据量很大时,有限考虑使用Redis、Memcache等产品。

  • Binding模块

    在使用接口+Mapper方式时,在程序启动时,MyBatis会扫描Mapper,并选择namespace对应的接口,将接口方法和mapper的ID进行匹配,如果存在错误则会抛出异常。

不需要实现dao层的接口,MyBatis会自动创建代理对象。

例如:sqlSession.getMapper(UserDao.class); // mybatis

		@Autowired             // Spring中

核心处理层

核心处理层包括:MyBatis的初始化;一次完成数据库操作的所有流程;

  • 配置解析

    在MyBatis初始化过程中,会加载mybatis-config.xml文件、mapper文件和接口中的注解信息,解析完后会将信息会以相应的形式保存到Configuration对象中。例如:节点会解析成ResultMap对象;接口被解析成ResultMapping对象。之后,利用Configuration对象创建SqlSessionFactory对象。

    在MyBatis初始化完成后,来发人员利用SqlSessionFactory创建SqlSession对象完成数据库操作。

  • SQL解析和scripting模块

    MyBatis实现了动态SQL语句的功能,提供了多种动态SQL语句对应的节点。如等。

    scripting模块会解析动态SQL节点,生成SQL语句。之后处理SQL语句中的占位符,绑定用户传入的实参。

  • SQL执行

    Executor、StatementHandler、ParameterHandler和ResultSetHandler。Executor辅助维护一级和二级缓存,提供事务管理的相关操作,将数据库操作委托给StatementHandler完成。

    StatementHandler首先通过ParameterHandler完成SQL语句的实参绑定,然后通过java.sql.Statement对象执行SQL语句得到结果集,最后通过ResultSetHandler完成结果集的映射,得到结果并返回。

  • 插件

    用户自定义插件可以改变MyBatis的默认行为,例如:拦截SQL语句,并重写。

接口层

SqlSession,没啥好说的

原文地址:https://www.cnblogs.com/zhuxiang1633/p/11400328.html