• MyBatis-知识点详解


    1、Mybatis 概述

    1.1、MyBatis 的概念和特点

    MyBatis 是一款优秀的持久层框架它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

    MyBatis 的优点较多,也是大多数开发者使用的原因,具体如下:

    • 简单易学且小巧灵活:自身很小,不会对应用程序或者数据库的现有设计强加任何影响,与JDBC相比,减少了50%以上的代码量。

    • SQL 解耦且功能丰富:通过提供DAL层,将业务逻辑和数据访问逻辑分离,即:SQL代码从程序代码中彻底分离出来,可重用,使系统的设计更清晰,更易维护,更易单元测试。同时提供 XML 标签支持编写动态 SQL,通过映射标签,支持对象和数据库的 ORM 字段关系映射。

    MyBatis 的缺点主要是由于其编写的 SQL 工作量大的原因,具体如下:

    • 编写SQL语句时工作量很大,尤其是字段多、关联表多时,因此对开发者对于 SQL 的熟练度要高。

    • 数据库移植性差,比如 MySQL 移植到 Orecle,SQL 语句会有差异从而引起错误。

    因此,MyBatis 专注于 SQL 本身,是实体类与 SQL 语句之间建立的映射关系(不是实体类与表),是一个足够灵活的持久层优化方案,适用于性能要求高,需求多变的项目。

    1.2、MyBatis 架构

    MyBatis 的架构大概是这样的,最上面是接口层,接口层就是开发人员在 Mapper 或者是 Dao 接口中的接口定义,是查询、新增、更新还是删除操作;中间层是数据处理层,主要是配置 Mapper -> XML 层级之间的参数映射,SQL 解析,SQL 执行,结果映射的过程。上述两种流程都由基础支持层来提供功能支撑,基础支持层包括连接管理,事务管理,配置加载,缓存处理。

    功能架构

    • API接口层:通过提供给外部使用的接口 API 操作数据库,接收到调用请求就会调用数据处理层来完成具体的数据处理。

    • 数据处理层:根据请求完成数据库操作,包括 SQL 查找、SQL 解析、SQL 执行和执行结果映射处理等。

      • 加载配置:在 Mybatis 初始化过程中,会加载 mybatis-config.xml 配置文件、映射配置文件以及Mapper接口中的注解信息,解析后的配置信息会形成相应的对象并保存到 Configration 对象中。之后,根据该对象创建 SqlSessionFactory 对象。待 Mybatis 初始化完成后,可以通过 SqlSessionFactory 创建 SqlSession 对象并开始数据库操作。

      • SQL解析:当 API 接口层接收到调用请求时,Mybatis 会根据 SQL 的 ID 和传入参数对象找到并解析对应的 MappedStatement,得到可执行 SQL。Mybatis 实现的动态 SQL 语句,几乎可以编写出所有满足需要的SQL。Mybatis 中scripting 模块会根据用户传入的参数,解析映射文件中定义的动态 SQL 节点,形成数据库能执行的 SQL 语句。

      • SQL执行:SQL语句的执行涉及多个组件,包括MyBatis的四大神器,它们是: Executor、StatementHandler、ParameterHandler、ResultSetHandler。将最终得到的 SQL 和参数拿到数据库进行执行,得到操作数据库的结果。

      • 结果映射:将操作数据库的结果按照映射的配置进行转换,可以转换成 HashMap、JavaBean 或者基本数据类型,并将最终结果返回。

    • 基础支撑层:提供数据处理层基础功能支持,包括连接管理、事务管理、配置加载和缓存处理等。

    image

    在不与Spring 集成的情况下,使用MyBatis执行数据库的操作主要如下:

    InputStream is = Resources.getResourceAsStream("myBatis-config.xml");
    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
    SqlSessionFactory factory = builder.build(is);
    sqlSession = factory.openSession();
    其中的SqlSessionFactory,SqlSession是MyBatis接口的核心类,尤其是SqlSession,这个接口是MyBatis中最重要的接口,这个接口能够让你执行命令,获取映射,管理事务。

    image

    MyBatis层级结构各个组件的介绍(这里只是简单介绍,具体介绍在后面):

    SqlSession: MyBatis核心API,主要用来执行命令,获取映射,管理事务。接收开发人员提供Statement Id 和参数.并返回操作结果
    Executor: 执行器,是MyBatis调度的核心,负责SQL语句的生成以及查询缓存的维护
    StatementHandler: 封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数、将Statement结果集转换成List集合。
    ParameterHandler: 负责对用户传递的参数转换成JDBC Statement 所需要的参数
    ResultSetHandler: 负责将JDBC返回的ResultSet结果集对象转换成List类型的集合
    TypeHandler: 用于Java类型和jdbc类型之间的转换
    MappedStatement: 动态SQL的封装
    SqlSource: 表示从XML文件或注释读取的映射语句的内容,它创建将从用户接收的输入参数传递给数据库的SQL。
    Configuration: MyBatis所有的配置信息都维持在Configuration对象之中


    __EOF__

  • 本文作者: 静守己心、笑淡浮华
  • 本文链接: https://www.cnblogs.com/mmgmj/p/16556877.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    华硕天选1天选2天选3天选4天选air原厂预装出厂系统恢复安装教程方法
    亲测:你这些网站都不知道,哪来时间去摸鱼?
    成都聚华祥科技:店铺优化怎么做
    X12学习手册
    我的周刊(第054期)
    javaee SpringMVC文件上传 项目结构
    测试驱动编程(4)模拟消除依赖
    C++ 混合运算的类型转换
    ElasticSearch 学习8 :ik分词器的扩展,及java调用ik分词器的analyzer
    C/C++教程 从入门到精通《第一章》—— 初识C/C++
  • 原文地址:https://www.cnblogs.com/mmgmj/p/16556877.html