当前位置: 首页 > news >正文

mapper文件的解释

<?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">
<mapper namespace="com.ruoyi.system.mapper.JianaiSongMapper"><resultMap type="JianaiSong" id="JianaiSongResult"><result property="songId"    column="song_id"    /><result property="title"    column="title"    /><result property="artist"    column="artist"    /><result property="album"    column="album"    /><result property="releaseDate"    column="release_date"    /><result property="genre"    column="genre"    /><result property="duration"    column="duration"    /><result property="lyrics"    column="lyrics"    /><result property="filePath"    column="file_path"    /><result property="coverPath"    column="cover_path"    /></resultMap><sql id="selectJianaiSongVo">select song_id, title, artist, album, release_date, genre, duration, lyrics, file_path, cover_path from jianai_song</sql><select id="selectJianaiSongList" parameterType="JianaiSong" resultMap="JianaiSongResult"><include refid="selectJianaiSongVo"/><where>  <if test="title != null  and title != ''"> and title = #{title}</if><if test="artist != null  and artist != ''"> and artist = #{artist}</if><if test="album != null  and album != ''"> and album = #{album}</if><if test="releaseDate != null "> and release_date = #{releaseDate}</if><if test="genre != null  and genre != ''"> and genre = #{genre}</if><if test="duration != null "> and duration = #{duration}</if><if test="lyrics != null  and lyrics != ''"> and lyrics = #{lyrics}</if><if test="filePath != null  and filePath != ''"> and file_path = #{filePath}</if><if test="coverPath != null  and coverPath != ''"> and cover_path = #{coverPath}</if></where></select><select id="selectJianaiSongBySongId" parameterType="Long" resultMap="JianaiSongResult"><include refid="selectJianaiSongVo"/>where song_id = #{songId}</select><insert id="insertJianaiSong" parameterType="JianaiSong" useGeneratedKeys="true" keyProperty="songId">insert into jianai_song<trim prefix="(" suffix=")" suffixOverrides=","><if test="title != null and title != ''">title,</if><if test="artist != null and artist != ''">artist,</if><if test="album != null">album,</if><if test="releaseDate != null">release_date,</if><if test="genre != null">genre,</if><if test="duration != null">duration,</if><if test="lyrics != null">lyrics,</if><if test="filePath != null">file_path,</if><if test="coverPath != null">cover_path,</if></trim><trim prefix="values (" suffix=")" suffixOverrides=","><if test="title != null and title != ''">#{title},</if><if test="artist != null and artist != ''">#{artist},</if><if test="album != null">#{album},</if><if test="releaseDate != null">#{releaseDate},</if><if test="genre != null">#{genre},</if><if test="duration != null">#{duration},</if><if test="lyrics != null">#{lyrics},</if><if test="filePath != null">#{filePath},</if><if test="coverPath != null">#{coverPath},</if></trim></insert><update id="updateJianaiSong" parameterType="JianaiSong">update jianai_song<trim prefix="SET" suffixOverrides=","><if test="title != null and title != ''">title = #{title},</if><if test="artist != null and artist != ''">artist = #{artist},</if><if test="album != null">album = #{album},</if><if test="releaseDate != null">release_date = #{releaseDate},</if><if test="genre != null">genre = #{genre},</if><if test="duration != null">duration = #{duration},</if><if test="lyrics != null">lyrics = #{lyrics},</if><if test="filePath != null">file_path = #{filePath},</if><if test="coverPath != null">cover_path = #{coverPath},</if></trim>where song_id = #{songId}</update><delete id="deleteJianaiSongBySongId" parameterType="Long">delete from jianai_song where song_id = #{songId}</delete><delete id="deleteJianaiSongBySongIds" parameterType="String">delete from jianai_song where song_id in <foreach item="songId" collection="array" open="(" separator="," close=")">#{songId}</foreach></delete>
</mapper>

这段代码是一个 MyBatis 的映射文件,它定义了与数据库交互的 SQL 语句和结果映射。以下是代码的逐行解释:

头部声明

<?xml version="1.0" encoding="UTF-8" ?>

这行声明了 XML 文档的版本和编码。

<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

这是文档类型声明,指定了 MyBatis 映射文件的 DTD,用于 XML 的验证。

映射空间声明

<mapper namespace="com.ruoyi.system.mapper.JianaiSongMapper">

定义了一个命名空间,通常是一个完整的 Java 接口名,用于隔离不同的映射文件。

结果映射定义

<resultMap type="JianaiSong" id="JianaiSongResult"><result property="songId"    column="song_id"    /><result property="title"    column="title"    /><!-- 其他字段省略 -->
</resultMap>

定义了一个结果映射 JianaiSongResult,它将数据库查询结果的列映射到 JianaiSong 实体类的属性上。

SQL 片段定义

<sql id="selectJianaiSongVo">select song_id, title, artist, album, release_date, genre, duration, lyrics, file_path, cover_path from jianai_song
</sql>

定义了一个 SQL 片段 selectJianaiSongVo,用于选取歌曲表中的所有字段。

查询操作

<select id="selectJianaiSongList" parameterType="JianaiSong" resultMap="JianaiSongResult"><include refid="selectJianaiSongVo"/><where>  <!-- 条件判断省略 --></where>
</select>

定义了一个查询操作 selectJianaiSongList,它使用 selectJianaiSongVo SQL 片段,并根据传入的参数动态地添加查询条件。

<select id="selectJianaiSongBySongId" parameterType="Long" resultMap="JianaiSongResult"><include refid="selectJianaiSongVo"/>where song_id = #{songId}
</select>

定义了一个根据歌曲 ID 查询歌曲信息的操作 selectJianaiSongBySongId

插入操作

<insert id="insertJianaiSong" parameterType="JianaiSong" useGeneratedKeys="true" keyProperty="songId"><!-- 插入语句省略 -->
</insert>

定义了一个插入操作 insertJianaiSong,它将 JianaiSong 实体类的数据插入到数据库中,并返回生成的主键值。

更新操作

<update id="updateJianaiSong" parameterType="JianaiSong"><!-- 更新语句省略 -->
</update>

定义了一个更新操作 updateJianaiSong,它根据传入的 JianaiSong 实体类的数据更新数据库中的记录。

删除操作

<delete id="deleteJianaiSongBySongId" parameterType="Long">delete from jianai_song where song_id = #{songId}
</delete><delete id="deleteJianaiSongBySongIds" parameterType="String">delete from jianai_song where song_id in <foreach item="songId" collection="array" open="(" separator="," close=")">#{songId}</foreach>
</delete>

定义了两个删除操作 deleteJianaiSongBySongIddeleteJianaiSongBySongIds,分别用于根据单个歌曲 ID 和多个歌曲 ID 删除记录。

遍历操作

<foreach item="songId" collection="array" open="(" separator="," close=")">#{songId}
</foreach>

这是一个遍历操作,用于生成 SQL 中的 IN 语句,它将数组或集合中的每个元素遍历出来,并用逗号分隔。

整个映射文件提供了对 jianai_song 表的 CRUD 操作(创建、读取、更新、删除),以及动态 SQL 功能,使得可以根据条件构建查询语句。

这个映射文件是如何与数据库进行交互的?

这个 MyBatis 映射文件通过定义 SQL 语句和结果映射来与数据库进行交互。以下是详细的交互过程:

1. 映射文件与 MyBatis 框架集成

  • 这个 XML 映射文件需要被 MyBatis 框架解析和加载。通常,这是通过在 MyBatis 配置文件中指定映射文件的位置来完成的,或者通过注解方式直接在接口上定义映射。

2. 定义结果映射(ResultMap)

  • <resultMap> 标签定义了如何将数据库查询结果的列映射到 Java 对象的属性上。在这个例子中,JianaiSongResult 结果映射定义了 JianaiSong 实体类的属性与数据库表 jianai_song 的列之间的对应关系。

3. 定义 SQL 片段(SQL Statement)

  • <sql> 标签定义了可重用的 SQL 片段,例如 selectJianaiSongVo,它包含了查询 jianai_song 表的所有字段的 SQL 语句。

4. 定义 CRUD 操作

  • <select><insert><update><delete> 标签定义了具体的数据库操作。这些操作使用前面定义的结果映射和 SQL 片段来执行数据库查询和更新。

5. 动态 SQL

  • MyBatis 支持动态 SQL,可以根据条件动态构建 SQL 语句。例如,<if> 标签用于在 <where> 子句中动态添加条件,只有当传入的参数不为空时,相应的条件才会被包含在 SQL 语句中。

6. 执行数据库操作

  • 当应用程序调用 Mapper 接口中的方法时,MyBatis 会根据方法名找到对应的 <select><insert><update><delete> 标签,并执行其中的 SQL 语句。
  • 对于 <select> 操作,MyBatis 会将查询结果根据结果映射转换为 Java 对象列表或单个对象,并返回给应用程序。
  • 对于 <insert><update><delete> 操作,MyBatis 会执行相应的 SQL 语句,并返回受影响的行数。

7. 参数和结果处理

  • MyBatis 使用参数占位符(如 #{property})来传递方法参数到 SQL 语句中。这些参数在执行 SQL 语句之前会被预处理,以防止 SQL 注入攻击。
  • 对于查询操作,MyBatis 根据结果映射将数据库查询结果映射到 Java 对象的属性中。

8. 事务管理

  • MyBatis 可以配置事务管理,以确保数据库操作的原子性、一致性、隔离性和持久性。

通过以上步骤,MyBatis 映射文件定义了与数据库交互的具体细节,使得 Java 应用程序可以通过简单的方法调用来执行复杂的数据库操作,同时保持代码的简洁性和可维护性。

相关文章:

mapper文件的解释

<?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"> <mapper namespace"com.ruoyi.system.mapper.Jianai…...

常见协议的高危软件漏洞信息

HTTP 协议 协议 | 软件 | 漏洞编号 | 漏洞描述 Apache Log4j CVE-2021-45105 | Apache Log4j拒绝服务攻击漏洞 XWiki Platform CVE-2023-26477 | XWiki Platform存在安全漏洞&#xff0c;该漏洞源于可以通过URL请求参数结合其他参数注入任意脚本宏 Microsoft Windows CVE-20…...

Mediatek Android13 ROM定制

目录 1、系统签名 2、默认关闭WIFI 3、默认关闭Bluetooth 4、默认关闭NFC 5、移除物理键盘支持 6、禁止 ANR、崩溃等的对话框显示 7、修改默认壁纸 8、取消USB PTP MTP MIDI等支持 9、设置Screen Lock默认为None 10、设置Data&time自动 11、设置特定时区 12、设…...

RedisInsight:企业级 Redis 管理与分析工具

1 介绍 RedisInsight 是一款专为企业级用户设计的 Redis 管理与分析工具,旨在简化 Redis 数据库的管理和优化操作。通过直观的图形化界面和强大的功能集,RedisInsight 提供了全面的监控、诊断、性能优化以及数据管理能力,帮助企业和开发团队更高效地管理和运维 Redis 实例。…...

c# 快捷键模块

文章目录 命名空间和类类成员静态成员 静态方法GenerateHotkeyIdWndProcGetWindowHandleAndSourceRegisterUnregister 静态方法&#xff08;外部调用&#xff09;RegisterHotKey 和 UnRegisterHotKey 委托HotKeyCallbackHandler 枚举HotkeyModifiers 应用示例 using System; us…...

【笔记】增值税计算笔记

增值税计算笔记 设 进价为 α \alpha α元 出价为 α τ \alpha\tau ατ元 增值税率为 r r r ∵ { 进 项 税 α 1 r r 销 项 税 α τ 1 r r 增 值 税 销 项 税 − 进 项 税 ∴ 增 值 税 α ( τ − 1 ) r 1 r \because \left\{ \begin{aligned}进项税 &\frac{…...

请解释 JavaScript 中的闭包,以及它的优缺点和常见使用场景?

闭包&#xff08;Closure&#xff09;是什么&#xff1f; 闭包是JavaScript中的一个重要概念&#xff0c;指的是一个函数能够记住并访问它的词法作用域&#xff0c;即使这个函数在其词法作用域之外执行。 换句话说&#xff0c;闭包使得函数可以“记住”它被创建时的环境。 闭…...

SpringBoot 集成 Caffeine 实现本地缓存

目录 1、Caffeine 简介 1.1、Caffeine 简介1.2、对比 Guava cache 的性能主要优化项1.3、常见的缓存淘汰算法1.4、SpringBoot 集成 Caffeine 两种方式 2、SpringBoot 集成 Caffeine 方式一 2.1、缓存加载策略 2.1.1、手动加载2.1.2、自动加载【Loading Cache】2.1.3、异步加载…...

druid连接池参数配置

最近发现生产环境经常有数据库连接超时的问题&#xff0c;排查发现是druid连接池参数设置不合理导致 总结问题如下&#xff1a; 为了防止僵尸连接&#xff0c;k8s ipvs做了连接超时限制&#xff0c;如果TCP连接闲置超过900s(15分钟)&#xff0c;客户端再尝试通过这个连接去发起…...

【OceanBase】通过 OceanBase 的向量检索技术构建图搜图应用

文章目录 一、向量检索概述1.1 关键概念① 非结构化数据② 向量③ 向量嵌入(Embedding)④ 向量相似性检索 1.2 应用场景 二、向量检索核心功能三、图搜图架构四、操作步骤4.1 使用 Docker 部署 OceanBase 数据库4.2 测试OceanBase数据库连通性4.3 开启数据库向量检索功能4.4 克…...

Linux 安装运行gatk的教程

1.下载安装 wget https://github.com/broadinstitute/gatk/releases/download/4.1.8.1/gatk-4.1.8.1.zip2.解压 unzip *.zip3.查看 gatk --help 如下显示表示安装成功&#xff1a; 注意&#xff1a;仅限在该包所在位置的路径下能使用...

什么是unit l2 norm

1. L2 Norm 定义 L2 norm&#xff08;或称欧几里得范数&#xff09;是用来衡量一个向量的“长度”或“大小”的一种方式。在 n 维空间中&#xff0c;给定一个向量V(V1,V2,…,Vn)&#xff0c;其 L2 norm 定义为&#xff1a; 也可以理解为该向量与原点之间的欧几里得距离。 2…...

手写顺序流程图组件

效果图 完整代码 <template><div><div class"container" :style"{ width: ${spacingX * (colNum - 1) itemWidth * colNum}px }"><divv-for"(item, i) in recordList":key"i"class"list-box":style&…...

适配器模式概述

大体介绍 适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;其核心目的是通过提供一个适配器类来使得原本接口不兼容的类可以一起工作。它通过将一个类的接口转换成客户端所期望的接口&#xff0c;使得原本因接口不兼容而无法一起工作的类可…...

Logo设计免费生成器:轻松设计个性化标志

在当今这个信息爆炸的时代&#xff0c;一个好的Logo标志已经成为品牌和企业的名片。它不仅是品牌的象征&#xff0c;也是企业文化和价值观的体现。然而&#xff0c;很多初创企业或小型团队往往因为预算有限&#xff0c;无法请专业的设计师来打造专属的Logo。这时候&#xff0c;…...

智能停车场车牌识别计费系统

作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0c;指导学生毕业设计并参与学生毕业答辩指导&#xff0c;…...

谷歌开通第三方平台OAuth登录及Java对接步骤

调研起因&#xff1a; 当然还是因为手头的海外项目&#xff0c;用户注册通常要用邮箱&#xff0c;正常流程需要给用户邮箱发送验证码&#xff0c;再让用户输入密码进行注册。 为了简化流程&#xff0c;让用户使用谷歌邮箱一键完成注册或登录&#xff0c; 我们直接获取谷歌邮箱、…...

人体:精妙绝伦的生命之躯

人体&#xff1a;精妙绝伦的生命之躯 在浩瀚宇宙中&#xff0c;人体犹如一颗璀璨的明珠&#xff0c;是自然界最伟大的杰作之一。它是一个高度复杂且精妙绝伦的有机系统&#xff0c;承载着生命的奥秘与奇迹&#xff0c;展现出令人惊叹的适应性、协调性和自我修复能力。从微观的…...

python的urllib模块和http模块

1.python的urllib库用于操作网页&#xff0c;并对网页内容进行处理 urllib包有如下模块&#xff1a; urllib.request&#xff1a;打开和读取URL urllib.error&#xff1a; 包含urllib.request抛出的异常 urllib.parse&#xff1a; 解析URL urllib.robotparser&#xff1…...

Java [后端] 开发日常记录(1)

目录 1、常用的注解 2、对字符串的处理 3、对JSON串的处理 -- The End -- 详细如下&#xff1a; 1、常用的注解 若返回的字段中有NUll&#xff0c;则不返回 JsonInclude(value JsonInclude.Include.NON_NULL) //在实体类中添加这个注解 JsonInclude(JsonInclude.Include.NON…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...