• 【Mybatis源码】源码分析


    (1)Mybatis简介

    Mybatis框架绕过我们使用起来更加简单,只需要通过调用Mapper接口的方法并且在mapper.xml中编写对应的sql语句来完成工作,只是Mybatis在JDBC的基础上进行了封装,让我们不需要关心connect对象的创建、statement对象的创建、参数的设置、结果集处理等等。Mybatis把这些步骤都封装成了一个个组件去完成对应的工作。

    (1)原生jdbc查询代码

    public static void main(String[] args) throws Exception {
        Class.forName("com.mysql.jdbc.Driver");
        // 获取数据库连接对象
        Connection conn=  DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test","root","123456");
    
        String sql="select * from emp where empno = ?";
        // 创建Statement对象
        PreparedStatement stm = conn.prepareStatement(sql);
        // 参数设置
        stm.setInt(1, 7369);
        // 执行查询,结果返回到ResultSet
        ResultSet rs = stm.executeQuery();
    
        // 处理结果集
        while(rs.next()){
          System.out.println(rs.getInt("empno"));
          System.out.println(rs.getString("ename"));
        }
        conn.close();
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    (2)使用Mybatis查询代码

      public static void main(String[] args) throws Exception {
      	// 配置文件
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        // 生成SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 打开回话
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 获取代理类
        EmpDao mapper = sqlSession.getMapper(EmpDao.class);
        // 通过代理类调用查询方法
        Emp empByEmpno = mapper.findEmpByEmpno(7369);
        // 关闭会话
        sqlSession.close();
      }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    (2)MyBatis中重要组件

    请添加图片描述

    (3)MyBatis的源码分析

    (1)准备工作

    (1)创建Configuration对象

    Configuration对象是全局的配置对象,SqlSessionFactory、SqlSession都包含了该对象,可以说该整个查询过程中都可能会用到该对象。
    (1)Configuration对象源码概述
    1-解析给定的配置文件,加载配置文件中的配置属性设置到Configuration中
    2-解析环境对象标签,设置到environment属性中,Environment对象包含了包含了TransactionFactory、DataSource
    3-解析日志相关标签并设置logImpl实现类
    4-Configuration对象如果不指定执行器,默认为简单的执行器SimpleExecutor
    5-解析配置的mappers包,并将每个Mapper接口生成一个MapperProxyFactory并放到mapperRegistry 属性中,方便下次用时获取。
    6-第五步的同时,它会去解析每个mapper.xml文件的各个增删改查标签,每个语句都会构建成一个MappedStatement对象,并缓存到mappedStatements集合中。

  • 相关阅读:
    Java 24 Design Pattern 之 策略模式
    是前端受欢迎,不是你学了前端你就受欢迎好吧
    pdf生成:wkhtmltopdf
    玩转SpringBoot:SpringBoot的几种定时任务实现方式
    WPF中如何设置自定义控件(三)
    【golang】http.ListenAndServe源码解析
    【JavaEE进阶】CSS选择器的常见用法
    处理耗时任务
    【Android - 技术期刊】第004期
    A预测蛋白质结构
  • 原文地址:https://blog.csdn.net/weixin_44823875/article/details/127410473