MyBatis笔记 二 动态SQL

动态SQL#

if#

和test属性连用,用于进行判断,如果test中的el为真,那么if中的部分就会拼接到SQL中

<select id="getStudentByName" parameterType="string" resultMap="studentMap">
    SELECT * FROM student
    <if test="name!=null and name!=''">
        WHERE name like concat('%', #{name}, '%')
    </if>
</select>

有个小坑,如果想用if识别参数名,要加上@Param注解

List<Student> getStudentByName(@Param("name") String name);

choose/when/otherwise#

多分支。提供id就用id查询,否则提供name就用name查询,否则返回空

<select id="getStudentByIdOrName" resultMap="studentMap">
    SELECT * FROM student
    <choose>
        <when test="id!=null">
            WHERE id=#{id}
        </when>
        <when test="name!=null">
            WHERE name=#{name}
        </when>
        <otherwise>
            WHERE 1=2
        </otherwise>
    </choose>
</select>

trim/where/set#

where用于给内部的SQL添加where前缀。

上面的例子WHERE写了三次

<select id="getStudentByIdOrName" resultMap="studentMap">
    SELECT * FROM student
    <where>
        <choose>
            <when test="id!=null">
                id=#{id}
            </when>
            <when test="name!=null">
                name=#{name}
            </when>
            <otherwise>
                1=2
            </otherwise>
        </choose>
    </where>
</select>

trim用于除去并替换内部SQL的前缀,下图是去掉内部SQL的and前缀加入where

我觉得这个应用场景可能在于使用foreach时,循环生成一些条件,然后第一个前缀是where,其它的前缀是and,但你生成时为了方便肯定全部写的是and。

set用于去掉首个逗号并添加set前缀,主要用于update语句

可以看作<trim prefix="set" prefixOverrides=","></trim>

foreach#

<select id="getStudentByIds" resultMap="studentMap">
    SELECT * FROM student WHERE id IN
    <foreach item="id" index="index" collection="idList"
                open="(" separator="," close=")">
        #{id}
    </foreach>
</select>
List<Student> getStudentByIds(@Param("idList") List<Long> idList);

bind#

就是在xml中实现字符串拼接并定义一个变量,感觉没有concat好用

posted @   yudoge  阅读(33)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示
主题色彩