ssm框架之mybatis框架动态SQL

1 mybatis动态sql

mybatis可以通过各种各样的标签在sql映射文件中实现如下功能
1、语句的动态拼接
2、前后缀格式处理
3、复杂参数处理
常用标签如下:
在这里插入图片描述

1.1 if标签

如下示例,当有一个入参为null或者空的时候的时候,不参与计算,这种情况就应该使用if标签

<update id="updateWebsite">update website<set><if test="name != null and name != ''">name = #{name},</if><if test="url != null and url != ''">url = #{url},</if><if test="age != null and age != ''">age = #{age},</if><if test="country != null and country != ''">country = #{country},</if></set>where id = #{id}</update>

1.2 where标签

如下示例,当使用where进行条件查询时候,可以用where标签,它可以把最前面的and去掉

<select id="selectByCondition" resultType="com.dts.entity.Website">select * from website<where><if test="name != null and name != ''">and name like concat('%',#{name},'%')</if><if test="country != null and country != ''">and country like concat('%',#{country},'%')</if><if test="age != null and age != ''">and age = #{age}</if></where></select>

1.3 choose标签

如下所示,类似于 java中的if else

<choose><when test="createtime != null and createtime != ''">and createtime = #{createtime}</when><otherwise>and createtime is null</otherwise>
</choose>

1.4 foreach标签

进行批量操作的时候,使用foreach标签

 <select id="selectByIds" resultType="com.dts.entity.Website">select * from website where id in<foreach collection="list" item="id" open="(" close=")" separator=",">#{id}</foreach></select>

1.5 set标签

与if标签一起配合,可以去掉最后一个逗号

<update id="updateWebsite">update website<set><if test="name != null and name != ''">name = #{name},</if><if test="url != null and url != ''">url = #{url},</if><if test="age != null and age != ''">age = #{age},</if><if test="country != null and country != ''">country = #{country},</if></set>where id = #{id}</update>

1.6 trim标签

trim标签比较复杂 它可以
动态地为SQL语句添加前后缀
智能忽略标签前后多余的and、or或逗号等字符
在这里插入图片描述
使用trim标签替换前面示例中的where标签
实现示例中相同的功能
在这里插入图片描述
使用trim标签替换前面示例中的set标签
实现示例中相同的功能
在这里插入图片描述

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

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

相关文章

Spring Boot 事务详解

Spring Boot 事务详解 引言 在现代应用程序中&#xff0c;事务管理是确保数据一致性和完整性的重要机制。Spring Boot 提供了强大的事务管理功能&#xff0c;使得开发者可以轻松地定义和管理事务。本文将详细介绍 Spring Boot 中的事务管理&#xff0c;包括事务传播行为、事务…

poetry使用

1.初始化 package name 填入口文件名 poetry init2.在本目录下虚拟 poetry config virtualenvs.in-project true 3.自动生成依赖文件和vent虚拟环境&#xff0c;管理本项目下载包 poetry add flask pandas numpy 4 4.下载依赖 poetry install 5.查看都安装了什么包 poe…

Git 新建本地分支并关联到远程仓库

文章目录 1、方法一2、方法二 1、方法一 A、新建本地分支&#xff1a; git checkout -b new-branch-nameB、push新分支到远程仓库&#xff1a; git push origin newBranchC、本地分支关联到远程&#xff08;选一个即可&#xff09;&#xff1a; git branch --set…

一条SQL在mysql数据库中经历的过程

SQL语句在MySQL数据库中普遍经历的过程如下&#xff1a; 客户端发起查询请求到MySQL数据库服务器监听端口&#xff1b; MySQL数据库server端接收到请求&#xff1b; server端从已有的连接池或者新建一个线程&#xff0c;用来处理客户端发起的请求&#xff1b; server层…

Compose 的产生和原理

引言 compose 出现的目的&#xff1a; 重新定义android 上ui 的编写方式。为了提高android 原生ui开发效率。让android 的UI开发方式跟上时代。 正文 compose 是什么&#xff1f; 就是一套ui框架 和flutter 一样是一套ui框架 Flutter&#xff1a;跨平台开发趋势与企业应用的…

【计算机网络】一二章

一 二 非常棒的例子 相同的传播时延&#xff0c;带宽越大&#xff0c;该链路上所能容纳的比特数越多 相同的传播时延&#xff0c;带宽越大&#xff0c;该链路上所能容纳的比特数越多 往返时间&#xff08;Round-Trip Time&#xff0c;RTT&#xff09;s是指从发送端发送数据分组…

微软OneNote无法同步解决方案

目录 前言原因UWP特性 解决方案C***h注册表 参考链接 前言 假设有多台Windows电脑&#xff0c;最方便且免费的多设备笔记同步方案就是微软自家的OneNote&#xff0c;使用OneDrive自带的5G云存储。 但是在国内大陆的OneNote&#xff0c;经常会出现无法同步、同步失败&#xff1…

《商业智能(BI)的演进:从数据仓库到智能决策》

01、什么是商业智能BI&#xff1f; 商业智能BI - 派可数据商业智能BI可视化分析平台 首先要了解什么是商业智能BI&#xff08; Business Intelligence &#xff09;&#xff1f;百度商业智能BI有很多很多官方的定义&#xff0c;各种解释&#xff0c;实际上从这么多年的经验出发…

云钥科技工业相机定制服务,助力企业实现智能智造

在工业自动化、智能制造和机器视觉快速发展的今天&#xff0c;工业相机作为核心感知设备&#xff0c;其性能直接决定了检测精度、生产效率和产品质量。然而&#xff0c;标准化工业相机往往难以满足复杂多样的应用场景需求&#xff0c;‌工业相机定制‌逐渐成为企业突破技术瓶颈…

LeetCode[19]删除链表的倒数第N个节点

思路&#xff1a; 要想一次循环&#xff0c;一趟遍历完&#xff0c;那肯定是要想到双指针了&#xff0c;但是双指针怎么做呢&#xff1f;题目给出删除倒数第N个&#xff0c;我们如果能找到倒数第N个节点的前一个节点就行了&#xff0c;倒数第N个肯定是倒着数&#xff0c;那我们…

API调用大模型推理与第三方API实现业务整合

基于Python实现大模型推理与第三方API调用的集成&#xff0c;需要结合Function Call机制与提示词工程。 一、技术架构设计 双阶段流程 推理阶段&#xff1a;大模型解析用户意图&#xff0c;生成结构化API调用指令执行阶段&#xff1a;Python代码解析指令并触发第三方API # 示例…

Java面试:集合框架体系

一、ArrayList 1.数组&#xff08;Array&#xff09; 是一种用连续的内存空间存储相同数据类型数据的线性数据结构 数组如何获取其他元素的地址值&#xff1f; 寻址公式&#xff1a;a[i] baseAddress i * dataTypeSize baseAddress&#xff1a;数组的首地址dataTypeSize&am…

麒麟v10 ARM64架构系统升级mysql数据库从mysql-5.7.27到mysql-8.4.4图文教程

1、背景与问题说明 因mysql-5.2.27版本存在安全漏洞问题&#xff0c;为保障系统安全&#xff0c;需将处于生产环境的麒麟v10 ARM64架构系统服务器上当前部署的mysql-5.7.27版本升级到mysql-8.4.4&#xff0c;以规避潜在风险&#xff0c;提升系统整体的安全性和稳定性。 1.1 本…

Android多线程通信机制

目录 ​引言 ​一、Android多线程通信的核心机制 ​1. Handler Looper MessageQueue ​2. AsyncTask&#xff08;已过时&#xff0c;但仍有参考价值&#xff09;​ ​3. HandlerThread与IntentService ​4. 线程池&#xff08;ThreadPoolExecutor&#xff09;​ ​5. …

使用 VLOOKUP 和条件格式在 Excel 中查找并标红匹配的串号

使用 VLOOKUP 和条件格式在 Excel 中查找并标红匹配的串号 你的步骤非常详细且清晰&#xff0c;能够帮助用户在 Excel 中通过 VLOOKUP 和条件格式来查找并标红匹配的串号。以下是对你提供的步骤的简要总结和补充说明&#xff1a; 1. 添加“是否匹配”列 在 a.xlsx 中新增一列…

Spring Boot 集成高德地图电子围栏

摘要&#xff1a;本文手把手教你通过 Spring Boot 调用高德地图 API 实现电子围栏功能&#xff0c;涵盖云端围栏创建、设备位置监控与本地算法校验&#xff0c;附带完整代码和避坑经验&#xff01; 一、电子围栏核心原理 1.1 什么是电子围栏&#xff1f; 虚拟地理边界&#x…

hadoop伪分布式搭建--启动过程中如果发现某个datanode出现问题,如何处理?

一、问题定位&#xff1a; &#xff08;1&#xff09;检查DataNode日志&#xff1a; DataNode日志通常位于$HADOOP_HOME/logs/或/var/log/hadoop-hdfs/目录下&#xff0c;文件名为hadoop-hdfs-datanode-<hostname>.log。重点关注以下错误类型&#xff1a; ——Incompa…

微软开源神器OmniParser V2.0 介绍

微软开源的OmniParser V2.0是一款基于纯视觉技术的GUI智能体解析工具&#xff0c;旨在将用户界面&#xff08;UI&#xff09;截图转换为结构化数据&#xff0c;从而实现对计算机屏幕上的可交互元素的高效识别和操控。这一工具通过结合先进的视觉解析技术和大型语言模型&#xf…

DLMS电能表通讯协议学习笔记

本文是对于IEC62056协议族&#xff0c;即DLMS协议族的中文说明手册。本文并没有包含DLMS协议族的全部&#xff0c;但解释了在应用中可能出现的大多数情况。本文的目的是为电能量数据采集终端提供与使用DLMS协议族的电能表通讯的协议说明。 本文参考文献如下&#xff1a; &#…

browser_use 自动化浏览器agent使用案例

参考&#xff1a; https://github.com/browser-use/browser-use/tree/577e15c963f7e3c499aac312ecb8da6e1f4733fe 浏览器启动后&#xff0c;页面一直空白问题解决&#xff1a; https://github.com/browser-use/browser-use/issues/986 安装&#xff1a; pip install browser…