zoukankan      html  css  js  c++  java
  • 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,没啥好说的

  • 相关阅读:
    Laravel 5.2 使用 JWT 完成多用户认证 | Laravel China 社区
    (上线时清缓存)laravel 5.1 的程序性能优化(配置文件)
    linux计划任务及压缩归档
    用户及用户管理
    vim编辑器
    linux进阶命令
    权限管理
    linux基础命令2
    linu基础命令1
    连接Xshell
  • 原文地址:https://www.cnblogs.com/zhuxiang1633/p/11400328.html
Copyright © 2011-2022 走看看