MyBatis的使用(XML映射文件)
MyBatis的使用(XML映射文件)
MyBatis基于注解开发简单便捷,但是弊端是失去SQL语句的灵活性,不能根据实际情况产生不同的SQL语句
MyBatis除了支持注解开发以外,还支持一种开发方式:XML映射文件,将SQL语句写到XML映射文件中,基于更多种的选择可以让SQL变得更加灵活
1.开发方式
1.和基于注解开发方式一样,有映射类/编写配置文件/编写Mapper持久层接口
2.将方法执行时候要运行的SQL语句放到XML文件中进行编写,提高灵活性
2.三重绑定
-
接口与XML文件的绑定关系,在XML映射文件的namespace中声明绑定的接口的全类名
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.itheima.mapper.EmpMapper"></mapper>必须还要在配置文件中声明xml文件位置,MyBatis才可以扫描到这些文件,扫描到与接口建立绑定关系
mybatis.mapper-locations=classpath:mappers/*.xml -
接口中的方法与XML文件中标签的绑定关系
如果接口中有一个方法,XML文件中就必须有对应的标签保存该方法对应的SQL语句
根据方法功能的不同,提供四种标签:< select >、< update >、< delete >、< insert >
public void deleteEmp(@Param("id") Integer id);标签必须给出id属性,属性就是对应的方法名称
<delete id="deleteEmp">DELETE FROM emp WHERE id = #{id} </delete> -
查询语句的返回值类型与XML文件中标签属性的绑定关系
如果执行的是DQL语句,< select >标签中除了要生命id为方法名之外,还需要声明一个属性resultType值为封装结果的全类名
public Emp selectEmpById(@Param("id") Integer id);<select id="selectEmpById" resultType="com.itheima.entity.Emp">SELECT * FROM emp WHERE id = #{id} </select>
3.动态SQL概述
可以随着条件的改变随之发生改变的SQL语句就是动态SQL,在MyBatis中只有XML映射文件的方式支持动态SQL
-
动态SQL使用-IF
< if >标签的核心功能对条件进行判断,当条件为true,则标签中的内容参与SQL拼接,否则不参与
if标签中有一个核心属性test,基于test传递条件可以进行判断
(1)在test条件中可以直接获取本次参数的内容并且不需要加#{}
(2)test条件中可以基于=、!=、>、>=、<、<=对数据进行判断,并且可以基于and或者or进行多条件连接
<if test="empQuery.name != null and empQuery.name != ''">name LIKE CONCAT('%', #{empQuery.name}, '%') </if>**如果有多个test条件,那么除了第一个之外后续的条件需要加 前AND **
<if test="empQuery.name != null and empQuery.name != ''">name LIKE CONCAT('%', #{empQuery.name}, '%') </if> <if test="empQuery.gender != null">AND gender = #{empQuery.gender} </if> -
动态SQL使用-WHERE
如果if经过了判断第一个条件前包含AND,基于where标签进行包裹可以自动将前AND去掉
如果没有任何一个if满足,基于where标签进行包裹可以不在SQL中拼接WHERE
SELECT * FROM emp <where><if test="empQuery.name != null and empQuery.name != ''">name LIKE CONCAT('%', #{empQuery.name}, '%')</if><if test="empQuery.gender != null">AND gender = #{empQuery.gender} <!-- 注意:多个条件判断除了第一个之外剩余条件需要前AND --></if><if test="empQuery.begin != null">AND entrydate >= #{empQuery.begin}</if><if test="empQuery.end != null">AND entrydate <= #{empQuery.end} <!-- <在XML中有特殊含义 需要被转义字符代替 --></if> </where>
-
动态SQL使用-SET
如果if经过了判断第一个更新字段包含前,,基于set标签进行包裹可以自动将前逗号去掉
UPDATE emp <set><if test="emp.username != null and emp.username != ''">username = #{emp.username}</if><if test="emp.password != null and emp.password != ''">, password = #{emp.password}</if><if test="emp.name != null and emp.name != ''">, name = #{emp.name}</if><if test="emp.gender != null">, gender = #{emp.gender}</if> </set> WHERE id = #{emp.id}
-
动态SQL使用-FOREACH
foreach标签可以用于遍历接口中的集合/数组参数,在SQL语句中进行动态的拼接
//基于集合删除员工信息 public void batchDelete(@Param("deleteIds") List<Integer> deleteIds);<delete id="batchDelete">DELETE FROM emp WHERE id IN<foreach collection="deleteIds" item="deleteId" separator="," open="(" close=")">#{deleteId}</foreach> </delete> -
动态SQL使用-SQL
SQL片段标签可以将XML文件重复的内容抽取出来,并且可以在多处复用
当要使用指定SQL片段的内容进行拼接时,使用include标签
<!-- SQL片段可以抽取XML文件中重复的内容 --> <sql id="BASE_COLUMN">id, username, password, name, gender, image, job, entrydate, dept_id </sql><select id="selectEmpById" resultType="com.itheima.entity.Emp">SELECT<include refid="BASE_COLUMN"></include>FROM empWHERE id = #{id} </select><select id="selectEmpListByCondition" resultType="com.itheima.entity.Emp">SELECT<include refid="BASE_COLUMN"></include>FROM emp </select>
相关文章:
MyBatis的使用(XML映射文件)
MyBatis的使用(XML映射文件) MyBatis基于注解开发简单便捷,但是弊端是失去SQL语句的灵活性,不能根据实际情况产生不同的SQL语句 MyBatis除了支持注解开发以外,还支持一种开发方式:XML映射文件,…...
localhost知识
文章目录 一、localhost是什么?二、localhost 在平时用到的地方三、 localhost 与 127.0.01 一、localhost是什么? localhost 是一个特殊的主机名,通常指代本机。它被用来进行本地开发和测试,也常被用作网络配置中的占位符&#…...
PyTorch入门学习(八):神经网络-卷积层
目录 一、数据准备 二、创建卷积神经网络模型 三、可视化卷积前后的图像 一、数据准备 首先,需要准备一个数据集来演示卷积层的应用。在这个示例中,使用了CIFAR-10数据集,该数据集包含了10个不同类别的图像数据,用于分类任务。…...
【EI会议征稿】 2024年遥感、测绘与图像处理国际学术会议(RSMIP2024)
2024年遥感、测绘与图像处理国际学术会议(RSMIP2024) 2024 International Conference on Remote Sensing, Mapping and Image Processing 2024年遥感、测绘与图像处理国际学术会议(RSMIP2024)将于2024年1月19日-21日在中国厦门举行。会议主要围绕遥感、测绘与图像处理等研究领…...
MySQL 8 - 处理 NULL 值 - is null、=null、is not null、<> null 、!= null
处理 NULL 值: IS NULL:IS NULL 用于检查一个列是否为 NULL。例如,如果查找一个表中某一列的值为 NULL 的行,可以使用以下语法: SELECT * FROM table_name WHERE column_name IS NULL;IS NOT NULL:IS NOT N…...
高教社杯数模竞赛特辑论文篇-2018年C题:大型百货商场会员画像描述(附获奖论文及MATLAB代码实现)
目录 摘 要 一、问题重述 1.1 问题背景 1.2 问题提出 二、问题分析 2.1 问题一的分析...
#力扣:2315. 统计星号@FDDLC
2315. 统计星号 - 力扣(LeetCode) 一、Java class Solution {public int countAsterisks(String s) {int cnt 0;boolean flag true;for(char c: s.toCharArray()) {if(c |) flag !flag;else if(c * && flag) cnt;}return cnt;} }...
设计模式——单例模式详解
目录 设计模式类型单例模式单例模式方式饿汉式静态常量方式静态代码块形式 懒汉式线程不安全(不推荐)懒汉式优化(不推荐) 双重检查(推荐方式)静态内部类(推荐方式)枚举方式ÿ…...
一、W5100S/W5500+RP2040树莓派Pico<静态配置网络信息>
文章目录 1. 前言2. 相关网络信息2.1 简介2.2 优点2.3 应用 3. WIZnet以太网芯片4. 静态IP网络设置示例讲解以及使用4.1 程序流程图4.2 测试准备4.3 连接方式4.4 相关代码4.5 编译烧录 5. 注意事项6. 相关链接 1. 前言 从本章开始我们将用WIZnet的W5100S/W5500以太网芯片结合RP…...
【C++的OpenCV】第十四课-OpenCV基础强化(二):访问单通道Mat中的值
🎉🎉🎉 欢迎各位来到小白 p i a o 的学习空间! \color{red}{欢迎各位来到小白piao的学习空间!} 欢迎各位来到小白piao的学习空间!🎉🎉🎉 💖💖&…...
elementUI el-collapse 自定义折叠面板icon 和 样式 或文字展开收起
: :v-deep{.el-collapse-item__arrow {width: 40px;}.el-icon-arrow-right:before {content: "展开";font-size: 15px;font-family: heiti;color: #2295ff;font-weight: bold;}.el-collapse-item__arrow.is-active {transform: none;}.el-collapse-item__arrow.is-a…...
如何用个人数据Milvus Cloud知识库构建 RAG 聊天机器人?(上)
生成式人工智能时代,开发者可以借助大语言模型(LLM)开发更智能的应用程序。然而,由于有限的知识,LLM 非常容易出现幻觉。检索增强生成(RAG)https://zilliz.com/use-cases/llm-retrieval-augmented-generation 通过为 LLM 补充外部知识,有效地解决了这一问题。 在 Chat …...
2023年江西省“振兴杯”工业互联网安全技术技能大赛暨全国大赛江西选拔赛 Write UP
文章目录 一、协议分析 - modbus二、协议分析 - 异常的流量三、协议分析 - S7Error四、协议分析 - OmronAttack五、组态编程 - 工程的秘密六、组态编程 - 工程的秘密七、组态编程 - 简单的计算八、组态编程 - 交通灯九、组态编程 - 有趣的转盘十、应急处置 - 登录日志分析十一、…...
PostMan 之 Mock 接口测试
在测试的时候经常会碰到后端开发工程师的接口还没有开发完成,但是测试任务已经分配过来。没有接口怎么测试呢? 测试人员可以通过 mock server 自己去造一个接口来访问。mock server 可用于模拟真实的接口。收到请求时,它会根据配置返回对应的…...
LuatOS-SOC接口文档(air780E)--libgnss - NMEA数据处理
示例 -- 提醒: 本库输出的坐标,均为 WGS84 坐标系 -- 如需要在国内地图使用, 要转换成对应地图的坐标系, 例如 GCJ02 BD09 -- 相关链接: https://lbsyun.baidu.com/index.php?titlecoordinate -- 相关链接: https://www.openluat.com/GPS-Offset.html-- 方案1, 经lua层进行数…...
基于华为云 IoT 物联网平台实现家居环境实时监控
01 智能家居环境监测 智能家居环境监测采用 Ruff 开发板作为主控,串口线连接温湿度传感器 DHT11 和空气质量传感器 SDS011,每5分钟采集一次数据,通过 MQTT 协议发送到华为云 IoT 物联网平台,并基于数据分析服务实时计算出整个家庭…...
【开源框架】Glide的图片加载流程
本篇文章从Glide 4.11源码入手,简单的分析整个图片请求的流程,本着 ”只见树林,不见树木“ 的原则,宏观请求流程,不细究实现细节(细节留坑埋点,之后慢慢写) 引入依赖 以下的所有分…...
win10下Mariadb绿色版安装步骤
使用绿色版的mariadb数据库管理软件,免费开源,可以用来替换MySQL。首先从mariadb官网下载绿色版本的压缩包。解压后、配置好即可以使用。 把他解压缩到C:\mariadb\之下。打开powershell: Cd c:\mariadb\bin .\mysql_install_db.exe 这一…...
wiresharak捕获DNS
DNS解析: 过滤项输入dns: dns查询报文 应答报文: 事务id相同,flag里 QR字段1,表示响应,answers rrs变成了2. 并且响应报文多了Answers 再具体一点,得到解析出的ip地址(最底下的add…...
vue源码分析(一)——源码目录说明
文章目录 一、如何下载源码(可忽略)(1)打开地址(2)复制链接(3)git clone 链接 二、源码目录说明1.可以根据你下载的源码通过package.json文件查看vue版本2.源码目录说明 一、如何下载…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...
Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...
