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

一、Mybatis的整体架构

在这里插入图片描述

1.1 接口层

功能:与数据库进行交互

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

在这里插入图片描述

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

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

  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);
    }

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 数据处理层

数据处理层是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:维护了一条<select|update|delete|insert>节点的封装
  • SqlSource:负责根据用户传递的parameterObject,动态生成SQL语句,将信息封装到BoundSql对象中,然后返回
  • BoundSql:表示动态生成的SQL语句及相应的参数信息
  • Configuration:Mybatis所有的配置信息都维持在Configuration对象之中

猜你喜欢

转载自blog.csdn.net/qq_56919740/article/details/133577988