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

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标签
实现示例中相同的功能
在这里插入图片描述

相关文章:

  • Modern C++处理 Hooks 机制
  • 解决Java多张图合成JPG时出现红色前景及多列自适应适配
  • 《基于Spring Boot+Vue的智慧养老系统的设计与实现》开题报告
  • CAN及CANFD协议
  • 第四届光学与机器视觉国际学术会议(ICOMV 2025)
  • RabbitMQ 和 Redis 的选择
  • ssm框架之mybatis框架搭建
  • 牛客周赛 Round 85(DE)
  • 蓝桥杯备赛(基础语法4)
  • Shell 脚本中的 `read` 命令:灵活处理用户输入
  • 20. Excel 自动化:Excel 对象模型
  • 【NeurIPS-2022】CodeFormer: 将人脸复原转化为码本预测以减少LQ-HQ映射的不确定性
  • 基于ssm学科竞赛小程序的设计及实现(源码+lw+部署文档+讲解),源码可白嫖!
  • 使用Flux查询数据
  • (6)用于无GPS导航的Nooploop
  • [原创](Modern C++)现代C++的关键性概念: 灵活多变的绑定: std::bind
  • 化学工业领域 - 石油化工、高分子化工、生物化工极简理解
  • 软考 中级软件设计师 考点知识点笔记总结 day05
  • E1-数组的平衡点2(前缀和)
  • .[OnlyBuy@cyberfear.com].REVRAC勒索mysql恢复---惜分飞
  • 国寿资产获批参与第三批保险资金长期投资改革试点
  • 淄博一酒店房间内被曝发现摄像头,当地警方已立案调查
  • 董军在第六届联合国维和部长级会议上作大会发言
  • 通用汽车回应进口车业务调整传闻:因经济形势变化重组,致力于在中国持续发展
  • 视频丨中国海警成功救助8名外籍遇险渔民,韩方向中方致谢
  • 陕西宁强县委书记李宽任汉中市副市长