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 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Java MyBatis的介绍及其执行原理 -> 正文阅读

[大数据]Java MyBatis的介绍及其执行原理

?写在前面?

🧭MyBatis学习
📢今天我们进行MyBatis框架的学习,认识MyBatis及其执行原理,感谢你的阅读,内容若有不当之处,希望大家多多指正,一起进步!!!
??如果觉得博主文章还不错,可以👍三连支持?一下哦😀
在这里插入图片描述

Java MyBatis的介绍及其执行原理

回顾JDBC编程

在了解MyBatista编程之前,让我们先回顾一下JDBC编程吧!

JDBC使用步骤

1. 引入依赖jar包

<dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.28</version>
</dependency>

引入MySQL的相关依赖,因为小编电脑里装的MySQL8.0版本,所以我引入的依赖也为8.0的版本。

2. 编程流程


 public static void main(String[] args) throws ClassNotFoundException {
        //1.加载数据库驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        try {
            //2.获取数据库的连接
            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/Java2022", "root", "111111");
       
            //3.创建Statementd对象
            Statement statement = connection.createStatement();
            
            //4.执行相关的SQL
            String sql = "select * from student";
            ResultSet resultSet = statement.executeQuery(sql);
            
            //5.对结果集进行处理
            while (resultSet.next()) {
                int sid = resultSet.getInt("SID");
                String sname = resultSet.getString("Sname");
                int sage = resultSet.getInt("Sage");
                String sex = resultSet.getString("Ssex");
                System.out.println(sid + "," + sname + "," + sage + "," + sex);
            }

            //6.关闭资源
            connection.close();
            statement.close();
            resultSet.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }

JDBC编程存在的问题

1. 每次都要加载连接驱动,假如我们在开发的过程中MySQL版本换了呢?就要加载别的数据库驱动, 驱动名称存在硬编码的问题

在这里插入图片描述

2. 每次都需要获取连接,指明数据库,用户名,密码等, 连接信息存在硬编码问题

在这里插入图片描述
3. 在上述JDBC编程代码中,我们执行的SQL语句是查询学生的信息,如果我们有别的查询需求呢?这时候就要更换查询语句了 SQL和Java代码存在耦合的问题
在这里插入图片描述
4. 在对结果集的处理过程中, 需要对结果集的数据类型进行判断,列名也需要手动判断
在这里插入图片描述
5. 每次需要关闭资源,另外再加上每次连接数据库 会造成资源的浪费
在这里插入图片描述

🚀 总结 🚀

1. 数据库的连接创建和释放的频繁会造成系统的资源浪费从而影响系统性能。
2. SQL语句在Java代码中存在硬编码造成了代码不易维护,实际使用过程中SQL变化可能比较大,SQL变动需要修改Java代码。
3. 结果集的解析存在硬编码(需要查询列号),SQL变化导致解析的代码发生变化,使得系统不易维护。

JDBC编程问题的解决

那么该如何解决以上的问题呢?
请添加图片描述

1. 数据库的连接创建和释放的频繁会造成系统的资源浪费从而影响系统性能。
【解决方法】: 使用连接池来复用数据库的连接
2. SQL语句在Java代码中存在硬编码造成了代码不易维护,实际使用过程中SQL变化可能比较大,SQL变动需要修改Java代码。
【解决方法】: 将SQL语句放在配置文件中(XML),这样即使需求改变我们直接修改配置文件,而不用修改Java代码本身
3. 结果集的解析存在硬编码(需要查询列号),SQL变化导致解析的代码发生变化,使得系统不易维护。
【解决方法】: 将数据库中的数据集映射成Java对象

其实对以上的解决方案, mybatis 已经给我们提供了,并且提供了一些其他特征。

mybatis的介绍及原理

mybatis介绍

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

mybatis执行原理

执行原理图

在这里插入图片描述
🚀【解读mybatis执行原理图】🚀

1.全局配置文件:SqlMapConfig.xml,用来配置数据源、事务、引入映射文件。
2.映射文件:Mapper1.xml、Mapper2.xml…Mappern.xml 有多个,对查询数据库的SQL,参数类型以及结果集进行封装。
3.SqlSessionFactory:session工厂,创建SqlSession会话。
4.SqlSession: 会话,进行CRUD 操作。
5.执行器Executor:缓存数据库两种实现方式。SQL输入参数后,执行器生成Statement对象(mybatis其实就是对JDBC的封装)然后Statement对象通过参数在数据库中进行查询,最后输出查询结果。
在这里插入图片描述

mybatis的使用示例

以查询java2022库下的student表为例:通过SID查询学生的信息。
在这里插入图片描述

1. 新建maven工程

在这里插入图片描述

2. 引入mybatis依赖,还有MySQL相关依赖
在这里插入图片描述

<!--   mybatis依赖-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.1</version>
    </dependency>
<!--    MySQL驱动依赖-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.28</version>
    </dependency>

3. 配置全局配置文件:mybatisConfig.xml

第一步: 首先在main文件夹下创建一个 resources文件夹 ,与Java原文件目录同级。
🚀【注意】🚀 ,一定要把 resources文件夹 设置成Test Sources Root类型。
设置方法: 右键resources文件夹 —> 选择Mark Directory as —> 选择Test Sources Root。
在这里插入图片描述
第二步: resources文件夹 创建 mybatisConfig.xml文件 并配置,如下:
在这里插入图片描述

4. 创建pojo类(Student 类),将数据库中student表数据映射成student对象,Student类中属性类型要和student表中的数据类型要相对应。

在这里插入图片描述
在这里插入图片描述

5. 创建Mapper接口文件(StudentMapper.java)

在这里插入图片描述

public interface StudentMapper {
    Student selectStudentById(Integer id);
}

6. 创建mapper.xml映射配置文件

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--根标签 namespace命令空间:给定接口文件的全路径-->
<mapper namespace="com.wyscoder.mybatis.mapper.StudentMapper">

    <!--
    select 标签为查询操作标签
    id属性:Statement的id,必填的,和接口文件的方法名保持一致
    parameterType:表示输入参数的类型
    resultType:表示输出参数的类型
    #{XXX}:表示占位符,XXX:接口方法中的参数名称
    -->
    <select id="selectStudentById" parameterType="int" resultType="com.wyscoder.mybatis.pojo.Student">
        select * from student where SID = #{id}
    </select>
</mapper>

7. 修改全局配置文件(mybatisConfig.xml)需要将mapper.xml的路径配置到全局配置文件中

<!--    映射文件-->
    <mappers>
<!--        resource属性,指定mapper.xml文件的路径-->
        <mapper resource="mapper/StudentMapper.xml"/>
    </mappers>

8. 测试

package com.wyscoder.mybatis;


import com.wyscoder.mybatis.mapper.StudentMapper;
import com.wyscoder.mybatis.pojo.Student;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

/**
 * @author wyscoder
 * @version 1.0
 */
public class TestMabatis {
    public static void main(String[] args) throws IOException {

        //1.读取全局配置文件
        String path = "mybatisConfig.xml";
        //2.通过Resources获取配置文件流
        InputStream resourceAsStream = Resources.getResourceAsStream(path);
        //3.创建会话工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //4.创建会话
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //5.通过代理模式创建代理类
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);

		//查询sid = 1的学生信息
        Student student = mapper.selectStudentById(1);
        System.out.println(student);

		//关闭资源
        sqlSession.close();
    }
}

运行结果:
在这里插入图片描述
🚀【MyBatis的使用步骤】🚀

1. 配置mybatis的全局配置文件(数据源、mapper映射)
2. 创建SqlSessionFactory对象
3. 通过SqlSessionFactory创建SqlSession对象
4. 通过SqlSession对象来对数据库进行CRUD操作
5. 关闭SqlSession资源

源码地址

Gitee源码地址https://gitee.com/wang-yongsheng666/java-study2/tree/master/MyBatis

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-12 17:36:19  更:2022-03-12 17:40:26 
 
开发: 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/24 8:37:54-

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