• 【Mybatis】搭建一个Mybatis框架需要做什么


    Mybatis是一个半自动的ORM(对象关系映射)框架,它封装了JDBC的操作

    首先了解一下JDBC的工作流程

    Connection

    通过DriverManger获得一个Connection(连接),一个Connection对象表示通过JDBC驱动与数据源建立的连接

    connection的获取可以从两个方面获取

    • JDBC API中提供的DriverManager类获取
    1. Connection connection = DriverManager.getConnection(
    2. "jdbc:mysql://127.0.0.1:3306/data?user=root&password=123456");
    • DataSource接口的实现类获取
    1. DataSource dataSource = new UnpooledDataSource(
    2. "com.mysql.cj.jdbc.Driver",
    3. "jdbc:mysql://127.0.0.1:3306/data?user=root&password=123456&AllowPublicKeyRetrieval=true",
    4. "root","qwer1234");

    Statement

    statement中执行SQL语句

    • Statement 不支持输入参数,有sql注入的风险
    • PreparedStatement:增加了设置SQL参数的方法
    • CallableStatement:增加了调用存储过程以及检索存储过程调用结果的方法
    1. 不同Statement执行的方式
    2. Connection connection = DriverManager.getConnection("");
    3. String sql = "SELECT * FROM admin WHERE username = ? AND password = ?";
    4. PreparedStatement preparedStatement = connection.prepareStatement(sql);
    5. preparedStatement.setString(1,"username");
    6. preparedStatement.setString(2,"password");
    7. ResultSet resultSet = preparedStatement.executeQuery();
    8. String sql2 = "SELECT * FROM admin WHERE username = 'username' AND password = 'passwor'";
    9. Statement statement2 = connection.createStatement();
    10. ResultSet resultSet2 = statement.executeQuery(sql);

    ResultSet

    结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等。 
     


    Mybatis的工作原理

    先封装SQL,接着调用JDBC操作数据库,最后把数据库返回的表结果封装成Java类

    SqlSession

    • 接口层的核心对象就是SqlSession,SqlSession是应用和MyBatis打交道的桥梁,SqlSession上定义了一系列数据库操作方法,然后在收到请求的时候再去调用核心处理层模块来完成具体操作
    • 它包含了所有执行语句、提交或回滚事务以及获取映射器实例的方法。
    • SqlSession是MyBatis提供的面向用户的API,表示和数据库交互时的会话对象,用于完成数据库的增删改查功能。SqlSession是Executor组件的外观,目的是对外提供易于理解和使用的数据库操作接口

    Executor(可扩展插件)

    • Executor是MyBatis的SQL执行器,MyBatis中对数据库所有的增删改查操作都是由Executor组件完成的。

    StatementHandler(可扩展插件)

    • StatementHandler组件封装了对JDBC Statement的操作,例如设置Statement对象的fetchSize属性、设置查询超时时间、调用JDBC Statement与数据库交互等,StatementHandler内运用了适配器模式和策略模式的思想
    • SimpleStatementHandler :封装了JDBC的 Statement 对象
    • PreparedStatementHandler:封装了JDBC的 PreparedStatement 对象 (可添加sql参数)
    • CallableStatementHandler:封装了JDBC的 CallableStatement 对象

    ParameterHandler(可扩展插件)

    • 当MyBatis框架使用的Statement类型为CallableStatement和PreparedStatement时,ParameterHandler用于为Statement对象参数占位符设置值

    ResultSetHandler(可扩展插件)

    • ResultSetHandler封装了对JDBC中的ResultSet对象操作,当执行SQL类型为SELECT语句时,ResultSetHandler用于将查询结果转换成Java对象

    TypeHandler(自定义转化处理器)

    • 处理JDBC类型与Java类型之间的转换

    Configuration

    用于描述MyBatis的主配置信息,其他组件需要获取配置信息时,直接通过Configuration对象获取。除此之外,MyBatis在应用启动时,将Mapper配置信息、类型别名、TypeHandler等注册到Configuration组件中,其他组件需要这些信息时,也可以从Configuration对象中获取。

    MappedStatement

    • MappedStatement用于描述Mapper中的SQL配置信息,是对Mapper XML配置文件中等标签或者@Select/@Update等注解配置信息的封装。

    MyBatis缓存

    一级缓存

    • 一级缓存默认是开启的,而且不能关闭。
    • 一级缓存级别:参数 localCacheScope
      • SESSION 当指定localCacheScope参数值为SESSION时,缓存对整个SqlSession有效,只有执行DML语句(更新语句)时,缓存才会被清除
      • STATEMENT 当localCacheScope值为STATEMENT时,缓存仅对当前执行的语句有效,当语句执行完毕后,缓存就会被清空。

    二级缓存

    • 默认二级缓存关闭
    • 作用域为 Namespaces
    • 当Namespaces内执行查询操作时,查询结果会缓存到二级缓存中,执行更新操作后,二级缓存会被清空。

    第三方缓存

    • 支持使用第三方作为缓存

    Mapper的生命周期

    Mapper配置文件的读取和装载

    Mapper代理的执行

     

     

  • 相关阅读:
    CentOS在应用程序菜单中创建快捷方式
    数据中心电力供应,请掌握这个技能!
    YoloV5|V7改进策略:全新特征融合模块AFPN,更换YoloV5|V7的Neck
    四川易点慧电子商务抖音小店打造便捷生活新体验
    LeetCode --- 1534. Count Good Triplets 解题报告
    Spring Data MongoDB SpEL表达式注入漏洞(CVE-2022-22980)分析与利用
    PyTorch实战:常用卷积神经网络搭建结构速览
    【优化组合】基于matlab人工蜂群算法求解投资优化组合问题【含Matlab源码 2137期】
    Gitlab CICD 下载artifacts文件并用allure打开,或bat文件打开
    python基础语法(六)
  • 原文地址:https://blog.csdn.net/m0_46628950/article/details/126369045