数据库之Mybatis映射文件、动态SQL

server/2024/9/29 15:34:23/

目录

1.XML映射文件

2.动态SQL


1.XML映射文件

之前我们执行sql语句是通过注解的方式,还有另外一种方式是通过XML配置文件执行sql语句,这份文件在Mybatis中也称为XML映射文件。

XML配置文件的规范:只有这三条规范都正确的情况下,才能正常运行sql语句。

XML文件中的约束在官网中可以找到:MyBatis中文网

右键接口复制全限定名以保证第二点规范。id为list,再右键emp类的全限定名,将其复制给resultType保证返回类型是Emp类型,也就是第三条规范。

执行顺序:1.mybatis查找与接口全类名相同的xml映射文件 2.再找到id属性值(list)与方法名相同的sql语句进行执行。

插件MybatisX:是一款基于IDEA的快速开发Mybatis的插件,为效率而生。有快速定位关联的代码等功能。

那我们到底用哪种方式去执行sql语句呢?官方说明如下:

使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句, Java 注解不仅力不从心,还会让你本就复杂的SQL语句更加混乱不堪。因此, 如果你需要做一些很复杂的操作,最好用XML来映射语句。

简单来说:使用Mybatis的注解,主要是来完成一些简单的增删改查功能。如果需要实现复杂的SQL功能,建议使用XML来配置映射语句。

2.动态SQL

动态SQL:随着用户的输入或外部条件的变化而变化的SQL语句。它是mybatis中非常重要的功能

场景:我们之前执行的sql语法都是固定写死的,必须通过某个字段或某些字段进行增删改查,比如根据id查找数据。在实际业务中,有可能什么都不指定,比如查找全部员工,这时什么都没有传入,查找就会失败。此时就要用到动态SQL。

标签if:用于判断条件是否成立。使用test属性进行条件判断,如果条件为true,则拼接SQL。

标签where:元素只会在子元素有内容的情况下才插入where子句。而且会自动去除子句的开头的AND或OR。

这里用到了mybatis中的以上两个标签。假如我要查找性别为男的员工,此时name、begin和end都为null,所以是不会拼接这两条sql语句的,也就是不会执行,只执行了gender这一条sql语句。如果三个都为null,那么红色部分全部不会执行,以保证sql语句不会报错。

以上代码可以通过MybatisX插件一键生成,生成的标签根据方法名进行识别,update就自动给上update标签,其余同理。

这里用到了<set>标签,用于去除属性间(末尾)的逗号,以保证sql语句的正确

标签foreach:用于遍历集合

动态批量删除ids集合中的数据:

sql">delete from emp where id in (1,2,3);--固定的SQL语句

对于以上XML映射文件中的动态sql语句编写,实际上有一些问题。如下:

当功能增多时,红色部分的SQL语句也会变多,如果其中的字段名需要修改,那么就要修改大量的SQL语句,如果遗漏修改,项目就会出现问题。这时我们借助java的封装思想,把这些相同的sql语句封装起来,需要时再引入进来,到时候只要修改封装的这个sql语句即可。

sql标签:用于抽取sql片段,需要给这个sql片段id,即封装了这个sql片段

include标签:引入sql片段,需要指定id,即引入sql片段


http://www.ppmy.cn/server/106127.html

相关文章

windows bash获取一个目录下所有的文件

在Windows系统中&#xff0c;我们可以使用命令行工具来获取文件夹下的所有文件名。具体操作如下&#xff1a; 1. 打开命令提示符&#xff08;WinR&#xff0c;输入cmd&#xff0c;回车&#xff09;&#xff1b; 2. 进入需要提取文件名的文件夹&#xff08;使用cd命令&#xf…

Angular快速入门

Angular学习小结 本文主要讲解ANgular在Windows平台的环境搭建。 安装Node.JS 官网下载稳定版本的node.js&#xff1a;https://nodejs.org/en/ 安装对话框一路默认下一步&#xff0c;当然&#xff0c;可以按需修改安装路径。 安装完成后会自动将Node.JS的根目录添加到环境变…

机器学习第五十三周周报 MAG

文章目录 week53 MAG摘要Abstract一、文献阅读1. 题目2. Abstract3. 预测标准3.1 问题提出3.2 数据预处理3.3 模型架构MAG3.4 时域故障模式识别3.5 故障检测器 4. 文献解读4.1 Introduction4.2 创新点4.3 实验过程4.4 实验结果4.5 结果分析 5. 结论 二、若依系统配置其余bug小结…

微信小程序flex-grow无效

在微信小程序中使用 Flexbox 布局时&#xff0c;如果遇到 flex-grow 属性无效的情况&#xff0c;可能是由几个不同的原因导致的。以下是一些可能的原因和解决方案&#xff1a; 1. 检查 Flex 容器 确保你的父元素&#xff08;即 Flex 容器&#xff09;已经正确设置了 display:…

《数据结构(C语言版)第二版》第六章-图(算法设计题)

习题1 分别以邻接矩阵和邻接表作为存储结构&#xff0c;实现以下图的基本操作&#xff1a; ①增加一个新顶点v, InsertVex(G, v); ②删除顶点v及其相关的边&#xff0c;DeleteVex(G,v); ③增加一条边<v, w>, InsertArc(G, v, w); ④删除一条边<v, w>, DeleteArc(G…

普通人用 AI 变现的4大方向

前言 AI出现&#xff0c;几家欢喜几家愁。 有人担心受怕恐因AI被裁&#xff0c;有人却早已利用AI躺赚&#x1f4b0;。 “利用AI发展副业的方式究竟有哪些&#xff1f;怎么样才能利用AI做到躺赚&#xff1f;” 我相信这是绝大部分人的疑惑点&#xff0c;包括我&#xff01;&…

基于大模型的Agent体系框架

引言 在上一节中&#xff0c;我们知道了大模型对于Agent的重要性&#xff0c;可以说大模型就是 Agent 的"大脑"。大模型为AI Agent提供了强大的自然语言理解和生成能力&#xff0c;使其能够在复杂环境中进行决策和行动&#xff0c;并展现出高度的自主性和灵活性。 L…

打卡第五十天:图论理论基础、深度优先搜索理论基础、所有可达路径、广度优先搜索理论基础

一、图论理论基础 图的基本概念 二维坐标中&#xff0c;两点可以连成线&#xff0c;多个点连成的线就构成了图。当然图也可以就一个节点&#xff0c;甚至没有节点&#xff08;空图&#xff09; 图的种类 整体上一般分为 有向图 和 无向图。有向图是指 图中边是有方向的&…