IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 【Mybatis】搭建一个Mybatis框架需要做什么 -> 正文阅读

[大数据]【Mybatis】搭建一个Mybatis框架需要做什么

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

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

Connection

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

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

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

Statement

statement中执行SQL语句

  • Statement 不支持输入参数,有sql注入的风险
  • PreparedStatement:增加了设置SQL参数的方法
  • CallableStatement:增加了调用存储过程以及检索存储过程调用结果的方法
不同Statement执行的方式

		Connection connection = DriverManager.getConnection("");
        String sql = "SELECT * FROM admin WHERE username = ? AND password = ?";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setString(1,"username");
        preparedStatement.setString(2,"password");
        ResultSet resultSet = preparedStatement.executeQuery();


        String sql2 = "SELECT * FROM admin WHERE username = 'username' AND password = 'passwor'";
        Statement statement2 = connection.createStatement();
        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|delete|insert>等标签或者@Select/@Update等注解配置信息的封装。

MyBatis缓存

一级缓存

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

二级缓存

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

第三方缓存

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

Mapper的生命周期

Mapper配置文件的读取和装载

Mapper代理的执行

?

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 19:12:48  更:2022-08-19 19:17:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:59:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码