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

动态 SQL

        动态 SQL 是 MyBatis 的强大特性之一,能够完成不同条件下不同的 sql 拼接。也就是说执行的 SQL 语句并不是固定的,而是不同人的不同操作执行的语句会有所差异。MyBatis 通过使用 标签 的方式来实现这种灵活性的。

<if>标签

        例如在有一些网站进行注册的时候,会要求必须输入邮箱、密码,而那些年龄性别什么的则并不是必填项。这种场景下往数据库插入就可以使用 <if> 标签来实现。

UserMapper:

int addUser2(UserEntity user);

UserMapper.xml:

    <insert id="addUser2">
        insert into userinfo(username,
                             <if test="photo != null">
                                 photo,
                             </if>
                             password) values (#{username},
                                               <if test="photo != null">
                                                   #{photo},
                                               </if>
                                               #{password})
    </insert>

单元测试 验证:

添加 photo 属性:

不添加 photo 属性:

<trim>标签

prefix:前缀,如果后面有东西不为空就加上

suffix: 后缀,如果后面有东西不为空就加上
prefixOverrides: 要去除掉的前缀,如果存在的话
suffixOverrides: 要去除掉的后缀,如果存在的话

        假设现在有种情况:全部数据都是非必传的,其中有一个数据传过来了,但是后面没数据就会导致 SQL 语句中多出来了一个 , 逗号就会导致报错。

        为了解决这一问题就可以使用 <trim> 标签。这相当于是完善了 <if> 标签存在的不足。

<where> 标签

        假设现在需要使用 where 条件进行对 id 或者 title 进行文章查询,使用 <trim> 标签实现:

        使用 <where> 标签可以更加简单地表示(更加优雅的方式):

<set>标签

        用在 update 修改操作里面的,跟 <where> 的使用一样,如果不传的话就不会生成,但是没有 set 的 update 是一个错误的 sql 语句,程序会报错。        

<foreach>标签

collection:绑定⽅法参数中的集合,即表示需要 foreach 的是谁

item: 遍历时的每⼀个对象,每次循环的是什么
open: 语句块开头的字符串
close: 语句块结束的字符串
separator: 每次遍历之间间隔的字符串

        当需要批量进行 添加、删除、修改 数据库的时候使用。下面是根据文章 id 来删除文章:

相关文章:

  • qt登录和闹钟实现
  • 修改SpringBoot项目配置文件
  • Python爬虫框架:Scrapy、EasySpider与FEAPDER的比较与实践
  • Vue70-路由的几个注意点
  • 计算机网络 MAC地址表管理
  • Zookeeper基础教程
  • 千年古城的味蕾传奇-平凉锅盔
  • HAL库开发--串口
  • windows安装spark
  • 浏览器支持http-flv协议
  • 网络虚拟化考题
  • 番外篇 | YOLOv8算法解析和实战应用:车辆检测 + 车辆追踪 + 行驶速度计算
  • Redis高并发高可用
  • 山东济南比较出名的起名大师的老师,中国最厉害的改名大师颜廷利:短命的小草,年年自损;长寿的大树,万古长青。。。(升命学说)
  • 华为Atlas NPU ffmpeg 编译安装
  • vue 登录
  • Python初体验
  • python 学习积累
  • Syslog日志外发
  • Java宝藏实验资源库(4)对象数组
  • 马云再次现身阿里打卡创业公寓“湖畔小屋”,鼓励员工坚持创业精神
  • 习近平会见塞尔维亚总统武契奇
  • 上海消防全面推行“检查码”,会同相关部门推行“综合查一次”
  • 湖南省职业病防治院通报3岁女童确诊“铊中毒”:去年病例,编辑误写为“近日”
  • 总奖池超百万!第五届七猫现实题材征文大赛颁奖在即
  • 中信银行:拟出资100亿元全资设立信银金融资产投资有限公司