zoukankan      html  css  js  c++  java
  • MyBatis(九)工作原理 之 MyBatis原理总结

      MyBatis 简单案例:

        @Test
         public void test() throws IOException {
              //1、获取 sqlSessionFactory
              SqlSessionFactory sqlSessionFactory = getsqlSessionFactory();
    
              //2、获取 sqlSession 实例,能直接执行已经映射的 SQL 语句
              SqlSession sqlSession = sqlSessionFactory.openSession();
    
              try {
                   //3、获取接口的实现类对象
                   /**
                    * 推荐使用
                    * 会为接口自动的创建一个代理对象,代理对象去执行增删改查方法
                    */
                   EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
                   System.out.println(employeeMapper);
                   System.out.println(employeeMapper.getClass());
                   Employee emp = employeeMapper.getEmpById(1);
                   System.out.println(emp);
              } finally {
                   sqlSession.close();
              }
         }

      实现流程

        (1)获取 sqlSessionFactory 对象

          解析文件的每一个信息保存在Configuration中,返回包含Configuration的DefaultSqlSessionFactory

          注意:MappedStatement:代表一个增删改查的详细信息

        (2)获取 sqlSession 对象

          返回一个DefaultSqlSession对象,包含Executor 和Configuration;这一步会创建Executor对象。

        (3)获取接口的代理对象(MapperProxy)

          getMapper,使用 MapperProxyFactory 创建一个MapperProxy的代理对象

          代理对象里面包含了,DefaultSqlSession(Executor)

        (4)执行增删改查方法;

      总结

        (1)根据配置文件(包括全局,SQL映射)初始化Configuration对象

        (2)创建一个DefaultSQLSession对象,它里面包含了Configuration以及Executor(根据全局配置文件中的 defaultExecutorType创建出对应的Executor)

        (3)DefaultSQLSession.getMapper(),拿到 Mapper接口对应的MapperProxy

        (4)MapperProxy 里面有(DefaultSqlSession)

        (5)执行增删改查方法:

          ① 调用 DefaultSqlSession 的增删改查,Executor;

          ② 会创建一个 StatementHandler 对象,(同时也创建出ParameterHandler和 ResultSetHandler)

          ③ 调用 StatementHandler 的预编译参数及设置参数值;使用ParameterHandler来给SQL设置参数;

          ④ 调用 StatementHandler 的增删改查方法;

          ⑤ ResultSetHandler 封装结果;

      注意:四大对象每个创建的时候都会有一个 interceptorChain.pluginAll(parameterHandler);

  • 相关阅读:
    SpringBoot-启动原理解析及源码阅读-todo
    SpringBoot-入门简介和优缺点分析
    《机器学习》笔记 第2章——模型评估与选择: 经验误差与过拟合、评估方法、性能度量、比较检验方法、偏差与方差
    《机器学习》笔记 第1章——绪论 : 基本术语/假设空间的基础概念
    【JS 01】 JS中的JSON.stringify后的json字符串后怎么转为Java中String.class可以直接接受的转义json字符串?
    【Java多线程07】 并发安全读取Shell脚本/命令的输出的INFO流和ERR流
    时序预测 03
    时序预测 02
    时序预测 01
    【搬运链接】美团技术团队
  • 原文地址:https://www.cnblogs.com/niujifei/p/15262171.html
Copyright © 2011-2022 走看看