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

【MyBaits】SpringBoot整合MyBatis之动态SQL

目录

一、背景

二、if标签

三、trim标签

四、where标签

五、set标签

六、foreach标签


一、背景

如果我们要执行的SQL语句中不确定有哪些参数,此时我们如果使用传统的就必须列举所有的可能通过判断分支来解决这种问题,显示这是十分繁琐的。在SpringBoot中整合MyBatis的xml文件中,我们可以使用动态SQL来完成操作

二、if标签

语法:<if test="参数!=null">

                ……

        </if>

其中test会产生一个boolean类型结果,如果返回ture则执行标签里的东西,如果false则不

如果有一个用户信息表,我们在插入时不确定用户是不是会传入Email这个字段时,我们可以通过if标签进行处理

    <select id="updateInfo" returnType="com.example.demo.model.User">insert into user(username,password,<if test="email != null">email,</if>ip)  value(#{username},#{password},<if test="email != null">#{email},</if>#{ip})</select>

if标签逗号问题

比如此时我们需要修改用户的信息,但是我们不知道用户修改了哪些信息时,我们就可以使用if标签

<update id="updateInfo">update userinfo set<if test="username != null">username=#{username},</if><if test="nickname != null">nickname=#{nickname},</if><if test="password != null">password=#{password},</if><if test="photo != null">photo=#{photo}</if><if test="email != null">,email=#{email}</if>where id=#{id}</update>

 要注意如果存在时拼接时的逗号问题,比如上述修改sql在最后一个判断修改时把逗号写在了后面,此时Email这个参数不为空则sql是update userinfo set email='', where id=1则会出错,上述代码仅展示if标签的使用,存在逗号问题,后面会有提到更优的解决方案

三、trim标签

语法------trim标签的四个属性

suffixOverrides:把最后一个关键字去掉,有则去没则不去掉

suffix:后缀

prefix:前缀

prefixOverrides:把最前面的一个关键字去掉,有则去没则不去掉

 此时我们就可以利用suffixOverrides这个属性来解决逗号问题了,下面是一个插入案例

    <insert id="add">insert into userinfo<trim prefix="(" suffix=")" suffixOverrides=","><if test="username != null">username,</if><if test="password != null">password,</if></trim><trim prefix="(" suffix=")" suffixOverrides=","><if test="username != null">#{username},</if><if test="password != null">#{password},</if></trim></insert>

四、where标签

语法:

将查询语句中的where关键字使用该标签代替,通常与if标签搭配使用,它比传统的SQL中的关键字where优势是,如果所有的查询条件都没有则最终生成SQL语句时不生成没有条件的where,它会将紧跟这where的标签的第一个and删除比如where and会将and删除

   使用where标签进行查询时 

<select id="" returnType=""">select * from userinfo <where><if test"username != null">username=#{username}</if><if test"id != null">and id=#{id}</if></where>
</select>

五、set标签

语法:

与where类似,通常搭配if使用,set主要用于修改操作,where是去掉前面的and,,而set是去掉最后一个逗号

<update id="">update userinfo<set><if test="username!=null"> set username=#{username}, </if><if test="password!=null"> set password=#{password}, </if></set>where id=#{id}
</update>

六、foreach标签

语法:

他的几个属性

collection:传回数据的集合

item:每次遍历的值,类似Java循环中的i变量

open:前缀

close:后缀

separator:每个变量之间的分隔符

<delete>delete from userinfo where id in<foreach collection=“接口集合变量名" open"(" close") separator="," item="item">#{item}</foreach>
<delete>

上述这段代码如果传参是list={1,2,3,4}则上述代码等效于

delet from userinfo where id=(1,2,3,4) 

http://www.lryc.cn/news/67853.html

相关文章:

  • 涅槃重生,BitKeep如何闯出千万用户新起点
  • 绝地求生 压枪python版
  • 麒麟操作V10SP1系统systemd目标单元
  • python基于LBP+SVM开发构建基于fer2013数据集的人脸表情识别模型是种什么体验,让结果告诉你...
  • antd——实现不分页的表格前端排序功能——基础积累
  • 案例11:Java超市管理系统设计与实现开题报告
  • @JsonAlias 和 @JsonProperty的使用
  • Grafana系列-统一展示-8-ElasticSearch日志快速搜索仪表板
  • 【K8s】openEuler23操作系统安装Docker和Kubernetes
  • 异常数据检测 | Python实现ADTK时间序列异常数据检测
  • 软件测试之jmeter性能测试让你打开一个全新的世界
  • Redis数据结构——动态字符串、Dict、ZipList
  • ipad可以用别的品牌的手写笔吗?便宜的ipad电容笔
  • 【数据库】关于SQL SERVER的排序规则的问题分析
  • 算法修炼之练气篇——练气十三层
  • ChatGPT:AI不取代程序员,只取代的不掌握AI的程序员
  • 数字革命下的产品:百数十年变迁的启示与思考。
  • 部门新来一00后,给我卷崩溃了...
  • 使用Spring Boot和Docker构建可伸缩的微服务架构,应对增长的业务需求
  • 计算机组成原理基础练习题第四章
  • 浅谈Gradle构建工具
  • 如何获取和制作免费的icon图标素材
  • 【MySQL】MySQL索引--聚簇索引和非聚簇索引的区别
  • 如何使用 SVG.js 中的一些相关方法来创建、设置和操作 image 元素
  • 展会进行时!5月16-18日箱讯与您相约中国航交会
  • CMake:递归检查并拷贝所有需要的DLL文件
  • python常见问题及解决方案
  • JUC之Synchronized与Lock
  • 动态规划理论基础
  • Redis的数据类型