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

动态SQL使用【JavaEE】

动态SQL使用

1. if 标签

判断一个参数是否有值,如果没值,那么就会隐藏 if 中的 sql

语法:

<if test="username!=null">username==#{username}
</if>

表达式:username 的参数是否为空

如果结果为 true,那么拼接的 SQL 就会加上 username=#{username},

如果结果为false,那么 if 标签中的 SQL 就会被省略

在这里插入图片描述

2. trim 标签

最主要的作用:去除 SQL 语句前后多余的某个字段

标签属性:

  • prefix:表示整个语句块,以prefix的值作为前缀
  • suffix:表示整个语句块,以suffix的值作为后缀
  • prefixOverrides:表示整个语句块要去除掉的前缀
  • suffixOverrides:表示整个语句块要去除掉的后缀
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="xxx">
...
</if>
</trim>

在这里插入图片描述

3. where 标签

主要作用:实现查询中的 where 替换

<!-- 根据 id 查询用户 --><select id="getUserById" resultMap="BaseMap">select * from userinfo<where><if test="id!=null">id=#{id}</if><if test="name!=null">and username=#{name}</if></where></select>

where 中的所有参数都为空,那么 where 的 sql 就不会生产

可以去除掉最前面的 and 标签

以上<where>标签也可以使用 <trim prefix="where" prefixOverrides="and">替换

4. set标签

主要作用:进行修改操作时,配合 if 来处理非必传传输,特点是会自动去除最后一个英文逗号。

<update id="updateById" parameterType="org.example.model.User">update user<set><if test="username != null">username=#{username},</if><if test="password != null">password=#{password},</if><if test="nickname != null">nickname=#{nickname},</if><if test="sex != null">sex=#{sex},</if><if test="birthday != null">birthday=#{birthday},</if><if test="head != null">head=#{head},</if><if test="createTime != null">create_time=#{createTime},</if></set>where id=#{id}
</update>

set标签中如果所有参数都是非必传,set会将这些语句隐藏,所有标签都使用逗号也没有问题,set会将逗号去掉(如果传一个值的话逗号会存在)。

以上<set>标签也可以使用 <trim prefix="set" prefixOverrides=",">替换

5. foreach 标签

主要作用:对集合进行循环。

对集合进⾏遍历时可以使⽤该标签。标签有如下属性:

  • collection:绑定⽅法参数中的集合,如 List,Set,Map或数组对象
  • item:遍历时的每⼀个对象
  • open:语句块开头的字符串
  • close:语句块结束的字符串
  • separator:每次遍历之间间隔的字符串
<delete id="deleteByIds">delete from articlewhere id in<foreach collection="list" item="item" open="(" close=")" separator=","
>#{item}</foreach>
</delete>
http://www.lryc.cn/news/4839.html

相关文章:

  • leetcode刷题
  • 移动设备安全管理基础指南
  • 【Java|多线程与高并发】 使用Thread 类创建线程的5种方法如何查看程序中的线程
  • 零基础学MySQL(五)-- 详细讲解数据库中的常用函数
  • 第4章 流程控制-if-else,Switch,For循环(循环守卫,循环步长,倒叙打印),While循环,多重循环...
  • 2.4G-WiFi连接路由器过程
  • 3. SpringMVC Rest 风格
  • Python3简介
  • 如何学习PMP?
  • 【DSP视频教程】第11期:插补算法,曲线拟合丝滑顺畅,统计函数和基础函数加速实现,汇集SIMD,饱和和MAC乘累加应用实战(2023-02-12)
  • 分类模型评估:混淆矩阵、准确率、召回率、ROC
  • 算法 ——世界 一
  • 2023年3月AMA-CDGA/CDGP数据治理认证考试这些城市可以报名
  • Java变量和数据类型,超详细整理,适合新手入门
  • Echarts 设置折线图拐点的颜色,边框等样式,hover时改变颜色
  • 做 SQL 性能优化真是让人干瞪眼
  • SpringBoot(3)之包结构
  • test2
  • LoadRunner安装教程
  • VHDL语言基础-Testbech
  • 机器学习基础总结
  • linux的三权分立设计思路和用户创建(安全管理员、系统管理员和审计管理员)
  • revit中如何创建有坡度的排水沟及基坑?
  • Web自动化测试——selenium篇(一)
  • 认识 CSS pointer-events 属性
  • 【java】springboot和springcloud区别
  • ​网易游戏实时 HTAP 计费风控平台建设
  • vue组件
  • 让mybatis-plus支持null字段全量更新
  • MASA Stack 1.0 发布会讲稿——生态篇