Mybatis常用动态SQL标签

<where> 标签

作用

智能处理 WHERE 子句,自动去除多余的 AND 或 OR

基本语法

java 复制代码
<where>
    SQL条件...
</where>

<if> 标签

作用

根据条件判断是否包含某段SQL

基本语法

java 复制代码
<if test="condition">
    SQL片段
</if>

<choose>, <when>, <otherwise> 标签

作用

类似 Java 的 switch-case 语句,从多个条件中选择一个

基本语法

java 复制代码
<choose>
    <when test="condition1">SQL1</when>
    <when test="condition2">SQL2</when>
    <otherwise>默认SQL</otherwise>
</choose>
java 复制代码
  <select id="selectConditionList" resultType="com.java.vo.GroupVO"
            parameterType="com.java.vo.filter.GroupFilterVO">
        SELECT count(b.sfp_user_id) people,a.id,a.group_name groupName, a.group_accord_name groupAccordName,a.app_id
        appId,a.create_by createBy,
        a.create_time createTime
        FROM user_group a LEFT JOIN group_user b on b.user_group_id = a.id
        <where>
            a.app_id = #{appId}
            <choose>
                <when test="onlyMine">
                    and a.create_by=#{userNm}
                    <choose>
                        <when test="keyword != null and keyword !=''">
                            and a.group_accord_name like CONCAT('%',#{keyword},'%')
                        </when>
                    </choose>
                </when>
                <otherwise>
                    <choose>
                        <when test="keyword != null and keyword !=''">
                            and (a.create_by like CONCAT('%',#{keyword},'%') or a.group_accord_name like
                            CONCAT('%',#{keyword},'%'))
                        </when>
                    </choose>
                </otherwise>
            </choose>
        </where>
        GROUP BY a.group_name , a.group_accord_name ,a.app_id , a.create_by ,a.create_time ,a.id
        ORDER BY
        <choose>
            <when test='peopleAscDesc == "0"'>
                people DESC,createTime DESC
            </when>
            <when test='peopleAscDesc == "1"'>
                people ASC,createTime DESC
            </when>
            <otherwise>
                createTime DESC
            </otherwise>
        </choose>
    </select>

<case> 标签

作用

mapper.xml文件中,需要直接给查询的数据直接赋值或者别名显示的时候需要用到CASE WHEN THEN

java 复制代码
select case 
  when total > max then 2 
  when total < min then 1 
else 0
end
from ta 

<set> 标签

作用

智能处理 UPDATE 语句中的 SET 子句,自动去除末尾逗号

java 复制代码
<!-- 动态更新用户信息 -->
<update id="updateUserSelective" parameterType="User">
    UPDATE users
    <set>
        <if test="name != null">
            name = #{name},
        </if>
        <if test="email != null">
            email = #{email},
        </if>
        <if test="phone != null">
            phone = #{phone}
        </if>
    </set>
    WHERE id = #{id}
</update>

<foreach> 标签

作用

遍历集合,通常用于 IN 条件或批量操作

属性说明

  • collection: 要遍历的集合
  • item: 每个元素的变量名
  • index: 索引变量名
  • open: 开始符号,只会拼接一次
  • close: 结束符号,只会拼接一次
  • separator: 分隔符。foreach 标签不会错误地添加多余的分隔符,也就是最后一次迭代不会加分隔符
java 复制代码
<!-- IN 查询 -->
<select id="selectUsersInIds" parameterType="list" resultType="User">
    SELECT * FROM users 
    WHERE id IN
    <foreach collection="list" item="id" open="(" close=")" separator=",">
            #{id}
    </foreach>
</select>

<!-- 批量插入 -->
<insert id="batchInsertUsers" parameterType="list">
    INSERT INTO users (name, email, age) VALUES
    <foreach collection="list" item="user" separator=",">
            (#{user.name}, #{user.email}, #{user.age})
    </foreach>
</insert>

<trim> 标签

作用

比 where 和 set 更灵活的标签,可自定义前后缀

属性说明

  • prefix: 添加前缀
  • suffix: 添加后缀
  • prefixOverrides: 去除的前缀
  • suffixOverrides: 去除的后缀
java 复制代码
<!-- trim替代where -->
<select id="selectByTrim" parameterType="map" resultType="User">
    SELECT * FROM users
    <trim prefix="WHERE" prefixOverrides="AND |OR ">
    <if test="name != null">
        AND name = #{name}
    </if>
    <if test="email != null">
        AND email = #{email}
    </if>
</select>

<!-- trim替代set -->
<update id="updateByTrim" parameterType="User">
    UPDATE users
    <trim prefix="SET" suffixOverrides=",">
        <if test="name != null">
            name = #{name},
        </if>
    </trim>
</update>
相关推荐
许彰午9 小时前
14-字段级SM4加密与SM2签名
java·低代码·架构
许彰午11 小时前
13-describe元数据输出
java·低代码·架构·状态模式
用户37215742613512 小时前
Java 设置 Word 文档编辑限制并允许指定区域编辑
java
宠友信息12 小时前
社区类源码开发实践中的仿小红书系统技术要点分析
java·spring boot·redis·mysql·uni-app·vue·内容运营
用户37215742613512 小时前
Java 设置 PDF 表单域只读或扁平化
java
luteres14 小时前
Spring学习笔记
java·后端·spring
南城以南溫暖如初14714 小时前
从零搭建24小时自助健身系统:技术选型与核心模块实战
java·spring boot·redis·mysql·vue·mybatis
重生之后端学习14 小时前
53. 最大子数组和[中等]✅
java·数据结构·算法·leetcode·职场和发展
XS03010614 小时前
【无标题】
java·tomcat·maven·intellij-idea
陈皮波比茶14 小时前
java日志框架
java