详细介绍:MyBatis 动态 SQL 语法

1. <where> 标签

  • 自动处理 WHERE 关键字,避免开头出现多余的 AND 或 OR

  • 如果内部条件全部为空,则不会生成 WHERE

SELECT * FROM sf_user

    
        user_name LIKE CONCAT('%', #{user_name}, '%')
    
    
        AND user_state = #{user_state}
    

2. <trim> 标签

  • 可以自定义前缀和去除多余的关键字。

  • prefix:添加前缀

  • prefixOverrides:去除开头指定的字符串(如 ANDOR

SELECT * FROM sf_user

    
        AND user_name LIKE CONCAT('%', #{user_name}, '%')
    
    
        AND user_state = #{user_state}
    

3. <set> 标签(用于 UPDATE)

  • 自动处理 SET 子句,去除末尾多余的逗号。


    UPDATE Author
    
        username = #{username},
        password = #{password},
        email = #{email},
        bio = #{bio}
    
    WHERE id = #{id}

4. <foreach> 标签(遍历集合)

  • 常用于 IN 查询。

  • collection:集合参数名

  • item:遍历时的元素变量名

  • open/close:开始和结束符号

  • separator:元素分隔符


5. <sql> 与 <include> 标签

  • <sql>:定义可重用的 SQL 片段

  • <include>:引用已定义的 SQL 片段


    

SELECT * FROM sf_user

    

⚠️ 注意点

  • 使用 #{} 进行参数占位,避免 SQL 注入。

  • 在 <if> 中判断字段是否为 null 或空字符串。

  • <where> 和 <set> 会自动处理语法冗余,推荐使用。

posted @ 2026-01-29 15:43  yangykaifa  阅读(2)  评论(0)    收藏  举报