【Spring 篇】MyBatis核心配置文件解密:数据之门的守护精灵

news2024/11/28 2:52:39

在这里插入图片描述

欢迎来到MyBatis的幕后花絮,今天我们将深入解析MyBatis的核心配置文件,这个神秘的数据之门的守护精灵。这份配置文件是连接你的应用程序和数据库之间的纽带,也是整个MyBatis舞台背后的幕后工作者。在这篇博客中,我们将揭开核心配置文件的神秘面纱,一探究竟。

一个咒语的开始

在开始我们的探险之前,让我们先理解MyBatis核心配置文件的基本结构。这个文件通常命名为 mybatis-config.xml,是整个MyBatis框架的大脑和指挥中心。打开这个文件,你会看到如下的内容:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- MyBatis configuration settings go here -->
</configuration>

这个配置文件以标准的XML格式开头,包含了一个根元素 <configuration>,其中的注释提示我们MyBatis的配置都将放置在这里。这就好比是一场魔法表演的前奏,我们将在这里配置MyBatis的各种参数和属性,引导整个舞台的演出。

数据之门的开启咒语

在MyBatis的核心配置文件中,有一个最为关键的配置项,那就是数据源的配置。数据源是连接数据库的关键,我们需要告诉MyBatis在哪里找到我们的数据。让我们来看一个简单的数据源配置:

<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

在这个例子中,我们定义了一个名为 development 的环境,这是一个通用的开发环境。我们指定了一个JDBC事务管理器和一个POOLED类型的数据源。接下来,我们设置了数据库的连接信息,包括数据库驱动、连接URL、用户名和密码。这就好比是打开数据之门的咒语,MyBatis现在知道了数据库的具体位置。

魔法粉尘:Type Aliases

MyBatis不仅支持原生的Java类型,还允许我们使用别名来简化配置和映射。这就像是在魔法的森林中植入了一些魔法粉尘,让一切变得更加轻松。在核心配置文件中,我们可以使用 <typeAliases> 元素定义这些别名:

<configuration>
    <!-- 其他配置 ... -->
    
    <typeAliases>
        <!-- 单个别名的定义 -->
        <typeAlias alias="User" type="com.example.model.User"/>

        <!-- 包扫描定义别名 -->
        <package name="com.example.model"/>
    </typeAliases>
</configuration>

这里我们定义了一个名为 User 的别名,指向了 com.example.model.User 这个类。而通过 <package> 元素,我们可以告诉MyBatis去扫描指定包下的所有类,将它们的简单类名作为别名。这样,我们在映射文件中就可以使用简短的别名,使配置更加清晰和简洁。

映射文件:SQL的魔法书

MyBatis的映射文件是这场魔法表演中的主角之一,其中包含了SQL语句的定义、参数映射、结果映射等一系列魔法。在核心配置文件中,我们需要告诉MyBatis去哪里找这些映射文件,以及它们的存放位置。这就像是在魔法城堡中指定了宝藏的所在地。看一下怎么配置:

<configuration>
    <!-- 其他配置 ... -->

    <mappers>
        <!-- 单个映射文件的引入 -->
        <mapper resource="com/example/mapper/UserMapper.xml"/>

        <!-- 包扫描引入映射文件 -->
        <package name="com.example.mapper"/>
    </mappers>
</configuration>

在这里,我们使用 <mapper> 元素引入了一个名为 UserMapper.xml 的映射文件。而通过 <package> 元素,我们可以告诉MyBatis去扫描指定包下的所有映射文件。这样,MyBatis就知道了在何处找到这些神秘的SQL语句和映射规则。

参数之书和结果之镜

在MyBatis的映射文件中,我们不仅可以定义SQL语句,还可以定义参数映射和结果映射。这就像是在魔法书中指定了咒语的参数和施法后的结果。让我们来看一个简单的例子:

<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
    <!-- 参数映射 -->
    <parameterMap id="userParameter" type="com.example.model.User">
        <parameter property="id" jdbcType="BIGINT"/>
        <parameter property="username" jdbcType="VARCHAR"/>
        <parameter property="password" jdbcType="VARCHAR"/>
    </parameterMap>

    <!-- 结果映射 -->
    <resultMap id="userResult" type="com.example.model.User">
        <id property="id" column="id" jdbcType="BIGINT"/>
        <result property="username" column="username" jdbcType="VARCHAR"/>
        <result property="password" column="password" jdbcType="VARCHAR"/>
    </resultMap>

    <!-- SQL语句 -->
    <select id="getUserById" parameterMap="userParameter" resultMap="userResult">
        SELECT * FROM user WHERE id = #{id}
    </select>
</mapper>

在这个例子中,我们定义了一个名为 userParameter 的参数映射,描述了 User 类的三个属性以及对应的JDBC数据类型。同时,我们定义了一个名为 userResult 的结果映射,描述了查询结果的三个字段以及对应的JDBC数据类型。最后,我们使用 <select> 元素定义了一个查询语句,并指定了参数映射和结果映射。

揭开帷幕:最终咒语

当我们配置好数据源、类型别名、映射文件等一切后,我们需要告诉MyBatis去读取和应用这个核心配置文件。这就好比是在整个魔法表演结束时,主持人宣布最终咒语。在Java代码中,我们通过以下方式创建SqlSessionFactory:

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

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

public class MyBatisMagic {

    public static void main(String[] args) {
        // 读取 MyBatis 配置文件
        String resource = "mybatis-config.xml";
        try (InputStream inputStream = Resources.getResourceAsStream(resource)) {
            // 创建 SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

            // TODO: 使用 SqlSessionFactory 进行后续操作
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这段代码中,我们使用 Resources.getResourceAsStream 方法读取了MyBatis核心配置文件。然后,通过 SqlSessionFactoryBuilderbuild 方法创建了一个 SqlSessionFactory 实例。有了这个实例,我们就可以在后续的代码中使用MyBatis进行数据库操作了。

小结:舞台的幕后工作者

MyBatis核心配置文件是整个MyBatis舞台的幕后工作者,负责组织和引导所有的数据操作。在这篇博客中,我们揭开了MyBatis核心配置文件的神秘面纱,学习了如何配置数据源、类型别名、映射文件等关键信息。这就好比是在一场魔法表演中,我们了解了所有幕后的精彩。希望通过这篇博客,你能更深入地理解MyBatis的核心配置,为你的数据魔法带来更多的灵感和理解。让我们继续共同探索数据之门的奇妙旅程,在编码的世界中畅游。

作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1399346.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

竞赛保研 机器学习股票大数据量化分析与预测系统 - python 竞赛保研

文章目录 0 前言1 课题背景2 实现效果UI界面设计web预测界面RSRS选股界面 3 软件架构4 工具介绍Flask框架MySQL数据库LSTM 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 机器学习股票大数据量化分析与预测系统 该项目较为新颖&am…

Cortex-M3/M4内核中断及HAL库函数详解(1):中断相关寄存器

0 工具准备 Keil uVision5 Cortex M3权威指南&#xff08;中文&#xff09; Cortex M3与M4权威指南 stm32f407的HAL库工程 STM32F4xx中文参考手册 1 NVIC相关寄存器介绍 在Cortex-M3/M4内核上搭载了一个异常响应系统&#xff0c;支持为数众多的系统异常和外部中断。其中&#…

MySQL运维篇(二)主从复制

一、概述 主从复制是指将主数据库的 DDL 和 DML 操作通过 二进制日志 传到从库服务器中&#xff0c;然后在从库上对这些日志重新执行&#xff08;也叫重做&#xff09;&#xff0c;从而使得从库和主库的数据保持同步。 MySQL 支持一台主库同时向多台从库进行复制&#xff0c; 从…

编译和链接(翻译环境:预编译+编译+汇编+链接​、运行环境)

一、翻译环境和运行环境​ 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境。​ 第1种是翻译环境&#xff0c;在这个环境中源代码被转换为可执行的机器指令。​ 第2种是执行环境&#xff0c;它用于实际执行代码。​ VS中编译器&#xff1a;cl.exe &#xff1b;Linux中…

Flink(十三)【Flink SQL(上)SqlClient、DDL、查询】

前言 最近在假期实训&#xff0c;但是实在水的不行&#xff0c;三天要学完SSM&#xff0c;实在一言难尽&#xff0c;浪费那时间干什么呢。SSM 之前学了一半&#xff0c;等后面忙完了&#xff0c;再去好好重学一遍&#xff0c;毕竟这玩意真是面试必会的东西。 今天开始学习 Flin…

3d渲染软件有哪些?3d云渲染推荐

目前市面上的3D渲染软件非常多&#xff0c;不同的建模软件都有自己的渲染方式&#xff0c;根据所处行业的不同和项目需要&#xff0c;设计师可以选择不同的软件帮助展示最终效果。 主流的渲染软件有&#xff1a;VRay和Corona&#xff1a;一般用于室内效果图渲染&#xff0c;与3…

[LitCTF 2023] Web类题目分享

[LitCTF 2023] Web类题目做法及思路解析&#xff08;个人分享&#xff09; 题目平台地址&#xff1a;NSSCTF | 在线CTF平台 一、[LitCTF 2023]我Flag呢&#xff1f; 奇怪&#xff0c;放哪里了&#xff0c;怎么看不见呢&#xff1f;&#xff08;初级难度&#xff09; 1.访问…

虚幻UE 材质-进阶边界混合之运行时虚拟纹理

之前在学习空山新雨后时对于边缘虚化过渡处理有很多技术 今天又要介绍一个边缘过渡的方法&#xff1a;运行时虚拟纹理 文章目录 前言一、运行时虚拟纹理二、使用步骤总结 前言 边缘过渡柔和的方式我们之前介绍了很多&#xff0c;但是效果也不是最好的。 像素偏移PDO和我们今天…

git22端口超时

笔记本换了个主板后&#xff0c;将内容用git上传到GitHub时发现22端口超时。 以为是网络啥的原因&#xff0c;但是用ssh -T gitgithub.com进行多次测试&#xff0c;发现不是网络问题。按照网上操作&#xff0c;在.ssh文件夹内将config文件进行修改&#xff0c;改成&#xff1a;…

【lettuce-排行榜】

背景&#xff1a; 这次游戏中台采用lettuce的zset完成游戏内的本服和跨服排行榜&#xff0c;因此写一下案例。 pom.xml <dependency><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId><version>6.2.4.RELEASE</ve…

MacBookPro怎么数据恢复? mac电脑数据恢复?

使用电脑的用户都知道&#xff0c;被删除的文件一般都会经过回收站&#xff0c;想要恢复它直接点击“还原”就可以恢复到原始位置。mac电脑同理也是这样&#xff0c;但是“回收站”在mac电脑显示为“废纸篓”。 如果电脑回收站&#xff0c;或者是废纸篓里面的数据被清空了&…

微信小程序(八)图片的设定

注释很详细&#xff0c;直接上代码 新增内容&#xff1a; 1.图片的三种常见缩放形式 2.图片全屏预览 源码&#xff1a; testImg.wxml <!-- 默认状态&#xff0c;不保证缩放比&#xff0c;完全拉伸填满容器 --> <image class"pic" mode"scaleToFill&qu…

六、MySQL---综合练习题(单表、多表、分组函数以及等级查询)

六、MySQL---综合练习题&#xff08;单表、多表、分组函数以及等级查询&#xff09; 1.素材简介2.创建dept表3.创建emp表4.创建salgrade表解答&#xff1a;一、单表查询二、多表查询三、分组函数查询四、等级查询 1.素材简介 数据库&#xff1a;dept_emp 1.dept表&#xff1a;…

推荐系统|2.1 协同过滤与矩阵分解简介 2.2 协同过滤

文章目录 显式特征和隐式特征协同过滤基于用户的协同过滤基于商品的协同过滤 显式特征和隐式特征 可以类比感性认识和理性认识。 显式特征是指可以直接获取&#xff0c;并且可以用作判断的依据。 而隐式特征是指需要进一步加工分析提炼&#xff0c;才能作为判断的依据。 比如说…

2024-01-16(SpringCloudMybati)

1.前后端分离&#xff1a;前后端分离开发的理解以及和前后端不分离的区别_前后端交互和前后端分离的区别-CSDN博客 2.resultMap是用于sql语句得到的结果集与实体类之间进行关系映射的。 要求&#xff1a;结果集中的列名和实体类的中属性名要一一对应&#xff0c;并且个数保持…

Java 内存模型深度解析

优质博文&#xff1a;IT-BLOG-CN 一、并发编程模型的两个关键问题 【1】并发中常见的两个问题&#xff1a;线程之间如何通信及线程之间如何同步。通信是指线程之间以何种机制来交换信息。在命令式编程中&#xff0c;线程之间的通信机制有两种&#xff1a;内存共享和消息传递&…

[晓理紫]每日论文分享(有中文摘要,源码或项目地址)--大模型、扩散模型、视觉导航

专属领域论文订阅 关注{晓理紫}&#xff0c;每日更新论文&#xff0c;如感兴趣&#xff0c;请转发给有需要的同学&#xff0c;谢谢支持 关注留下邮箱可每日定时收到论文更新服务 分类: 大语言模型LLM视觉模型VLM扩散模型视觉导航具身智能&#xff0c;机器人强化学习开放词汇&a…

大创项目推荐 深度学习验证码识别 - 机器视觉 python opencv

文章目录 0 前言1 项目简介2 验证码识别步骤2.1 灰度处理&二值化2.2 去除边框2.3 图像降噪2.4 字符切割2.5 识别 3 基于tensorflow的验证码识别3.1 数据集3.2 基于tf的神经网络训练代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x…

数据结构Java版(2)——栈Stack

一、概念 栈也是一种线性数据结构&#xff0c;最主要的特点是入栈顺序和出栈顺序是相反的&#xff0c;操作时只能从栈顶进行操作&#xff0c;在Java中给我们提供了一个泛型栈——Stack&#xff0c;其中最常用的方法有&#xff1a; void push(E):进栈E pop():退栈E peek():查看…

SpringBoot解决Slow HTTP慢速攻击漏洞

项目场景&#xff1a; 扫描到的漏洞截图&#xff1a; 攻击原理&#xff1a; Web应用在处理HTTP请求之前都要先接收完所有的HTTP头部&#xff0c;因为HTTP头部中包含了一些Web应用可能用到的重要的信息。攻击者利用这点&#xff0c;发起一个HTTP请求&#xff0c;一直不停的发送…