mybatis-整体框架

什么是mybatis

mybatis是一个orm持久性框架,它支持动态SQL、存储过程、高级映射,它可以通过xml和注解方式写SQL,通过一些简单配置完成自动化
完成参数的映射以及结果的映射

学习mybatis源码的好处

mybatis中含有大量优质代码丰富的设计模式,通过对该源代码的学习,不仅跟清楚了解mybatis的运行过程而且能提高对设计模式的理解与应用,以此在工作中能合理应用设计模式,实现代码结构层次的优美性。

从学习mybatis源码对比学习spring、dubbo、rocketMq、springboot 来说,其代码量不大,学起来不费劲,所以来说想学源码先学mybatis是一个不错的选择

学习mybatis学习目标

  • 合理设计代码目录及类名称
  • 合理运用设计模式
  • 通过对源码的学习,提高对业务代码的代码流程设计

mybatis的优势

  1. 通过一些xml标签(if choose when)完成动态SQL
  2. 通过Mapper接口映射xml的方式,降低了其耦合度
  3. 避免了传统的jdbc的一些重复操作,而且它拥有参数自动匹配和结果的自动映射
  4. 使用xml方式写SQL,更加方便书写复杂SQL

与jdbc编码区别

传统jdbc

一下是传统jdbc操作

try {
      Class.forName("com.mysql.cj.jdbc.Driver");
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    }
    Connection connection = null;
    PreparedStatement statement = null;
    try {
      connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1/order", "root", "");
      statement = connection.prepareStatement("SELECT * FROM order where id in (1,2,3)");
      ResultSet resultSet = statement.executeQuery();

      List<Order> orderList = new ArrayList<>();
      while (resultSet.next()) {
        Order order = new Order();
        long id = resultSet.getLong("id");
        String state = resultSet.getString("state");
        order.setId(id);
        order.setState(state);
        orderList.add(order);
      }
    } catch (SQLException e) {
      e.printStackTrace();
    } finally {
      if (statement != null) {
        try {
          statement.close();
        } catch (SQLException e) {
          e.printStackTrace();
        }
      }
      if (connection != null) {
        try {
          connection.close();
        } catch (SQLException e) {
          e.printStackTrace();
        }
      }

mybatis

    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
    SqlSessionFactory build = builder.build(Resources.getResourceAsReader("mybatis-config.xml"));
    SqlSession sqlSession = build.openSession();
    OrderMapper mapper = sqlSession.getMapper(OrderMapper.class);
    List<Order> orderList = mapper.getOrderList("1,2,3");

整体架构图

MyBatis的整体架构分为三层,分别是基础支持层、核心处理层和接口层

接口层

接口层相对简单,其核心是SqlSession接口,该接口中定义了MyBatis暴露给应用程序调用的API,也就是上层应用与MyBatis交互的桥梁。接口层在接收到调用请求时,会调用核心处理层的相应模块来完成具体的数据库操作

核心处理层

在核心处理层中实现了MyBatis的核心处理流程,其中包括MyBatis的初始化以及完成一次数据库操作的涉及的全部流程。

基础支持层

基础支持层包含整个MyBatis的基础模块,这些模块为核心处理层的功能提供了良好的支撑,可以将基础层看做mybaits的功能工具

mybatis SQL执行流程

MyBatis执行一条SQL语句的大致过程

mybatis所用设计模式

  • 工厂方法 DataSource
  • 动态代理 mapper方法的执行 MapperProxy
  • 装饰模式 Executor Cache
  • 建造者模式 SqlSessionFactoryBuilder、MappedStatement
  • 适配器模式 mybatis logging
  • 组合模式 处理动态SQL节点时
  • 模板方法模式 Executor
  • 策略模式 DefaultSqlSession中Executor的切换
  • 责任链模式 interceptor

在线mybatis技术内幕

posted @ 2022-04-13 22:16  liuhuayiye  阅读(121)  评论(0编辑  收藏  举报