• Mybatis学习笔记——mybatis的整体架构


    一、Mybatis的整体架构

    在这里插入图片描述

    1.1 接口层

    功能:与数据库进行交互

    • Mybatis提供了两种与数据库交互的方式:
        1. 使用传统的Mybatis提供的API
        1. 使用Mapper接口
    传统的API方式
    将statement id和查询参数传递给SqlSession对象,使用SqlSession对象完成和数据库的交互
    
    • 1

    在这里插入图片描述

    Mapper接口方式
    上面的传统的方式虽然简单和实用,但是它不符合面向语言的概念和面向接口编程的习惯,因此,Mybatis增加了支持接口调用的方式
    
    • 1

    在这里插入图片描述
    两种交互方式的代码演示:

    1. Mybatis提供的传统API
        /**
         * 方式一:使用mybatis的传统API和数据库进行交互
         */
        @Test
        public void testTraditionalWay() throws Exception{
    
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            SqlSessionFactory factory = builder.build(Resources.getResourceAsStream("mybatis-config.xml"));
            SqlSession sqlSession = factory.openSession();
    
            Student student = sqlSession.selectOne("com.demo.selectStudent",3);
            sqlSession.commit();
            sqlSession.close();
            System.out.println(student);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    2.使用Mapper接口

     /**
         * 方式二:基于Mapper接口和数据库进行交互
         */
        @Test
        public void testMapperInterface() throws Exception
        {
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            SqlSessionFactory factory = builder.build(Resources.getResourceAsStream("mybatis-config.xml"));
            SqlSession sqlSession = factory.openSession();
            
            StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
            mapper.insert(new Student(3,"李四",1));
            sqlSession.commit();
            sqlSession.close();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    1.2 数据处理

    数据处理层是Mybatis的核心层,它主要负责具体的SQL查找、SQL解析、SQL执行和执行结果处理等功能

    • 数据处理层主要完成两个功能:
      • 1、通过传入的参数构造动态SQL语句
      • 2、SQL语句的执行以及封装查询结果
    动态构造SQL

    动态 SQL 是 MyBatis 的强大特性之一。在 JDBC 或其它类似的框架中,开发人员通常需要手动拼接 SQL 语句。根据不同的条件拼接 SQL 语句是一件极其痛苦的工作。例如,拼接时要确保添加了必要的空格,还要注意去掉列表最后一个列名的逗号。而动态 SQL 恰好解决了这一问题,可以根据场景动态的构建查询。

    SQL执行和结果集的封装

    动态SQL语句生成之后,MyBatis 将执行SQL语句,并将可能返回的结果集转换成List 列表。MyBatis 在对结果集的处理中,支持结果集关系一对多和多对一的转换,并且有两种支持方式,一种为嵌套查询语句的查询,还有一种是嵌套结果集的查询

    1.3 框架支撑层

    框架支撑层是整个Mybatis框架的地基,负责最基础的功能支撑,包括连接池管理事务管理配置加载缓存管理,这些都是共用的组件,为上层的数据处理层提供最基础的支撑

    二、主要构件及其关系

    在这里插入图片描述

    • SqlSession:作为Mybatis工作的主要顶层API,表示和数据库交互的会话,完成与数据库的增删改查功能
    • Executor:Mybatis的执行器,真正的增删改查实际是Executor对象负责完成的,具体负责SQL语句的生成和查询缓存的维护
    • StatementHandler:封装了JDBC Statement操作,如设置参数、将Statement结果集转换成List集合
    • ParameterHandler:负责对用户传递的参数转换成JDBC Statement 所需要的参数
    • ResultSetHandler:负责将JDBC返回的ResultSet结果集对象转换成List类型的集合
    • TypeHandler:负责java数据类型和jdbc数据类型之间的映射和转换
    • MappedStatement:维护了一条节点的封装
    • SqlSource:负责根据用户传递的parameterObject,动态生成SQL语句,将信息封装到BoundSql对象中,然后返回
    • BoundSql:表示动态生成的SQL语句及相应的参数信息
    • Configuration:Mybatis所有的配置信息都维持在Configuration对象之中
  • 相关阅读:
    python 打包可执行文件-pyinstaller详解
    【计算机网络】第三讲网络相关协议讲解(DNS、NAT、ICMP、总结)
    pandas数据类型之Series
    QT 中map的使用
    [附源码]计算机毕业设计JAVA高校创新创业项目管理系统
    Tomcat 为什么要破坏 Java 双亲委派机制?
    mysql8.0.34部署单节点与集群-AB复制(IO与SQL线程不同步解决方法)
    矩阵的相似性度量的常用方法
    oninput和onchange事件有什么区别以及使用场景
    【python】云打印实现
  • 原文地址:https://blog.csdn.net/qq_56919740/article/details/133577988