MyBatis框架多态SQL

目录

MyBatis框架动态SQL的常用标签

一、if标签

二、where标签

三、choose(when、otherwise)标签

四、foreach标签

五、set标签

六、trim标签


在现代 Web 应用开发中,数据库操作是至关重要的一环。MyBatis 作为一款优秀的持久层框架,为开发者提供了灵活且强大的数据库交互方式。其中,多态 SQL 是 MyBatis 的一个重要特性,能够显著提高代码的可读性和可维护性。


MyBatis框架动态SQL的常用标签

标签说明
if条件判断,与Java中的计语句类似
where为SQL语句动态添加where关键字
choose条件判断,这是一个组合标签,需要yuwhen、otherewise标签搭配使用。可实现与Java中的switch语句类似的功能
foreach以便利方式处理集合类型参数
set为SQL语句动态添加set关键字,实现动态实现数据更新功能
trim对SQL语句进行格式化处理,添加或移除前后缀

一、if标签

if标签是MyBatis框架动态SQL技术中重要且常用的标签之一,它所实现的功能与Java中的if语句基本相同,用法也很相似。

        select *
        from t_sys_user
        where 1=1
        <if test="roleId != null">
            and u.roleId = #{roleId}
        </if>
        <if test="realName != null and realName != '' ">
            and u.realName like CONCAT('%',#{realName},'%')
        </if>

二、where标签

where标签主要作用是对SQL语句中的where关键字进行简化处理,并可以智能的处理其内部and、or等关键字,避免多余字符带来的语法错误。

        select *
        from t_sys_user
        <where>
            <if test="roleId != null">
            and u.roleId = #{roleId}
            </if>
            <if test="realName != null and realName != '' ">
            and u.realName like CONCAT('%',#{realName},'%')
            </if>
        </where>

三、choose(when、otherwise)标签

choose标签是一个组合标签,通常与when、otherwise标签配合使用,实现了类似于Java中switch语句的功能。

        select * from t_sys_user
        <where>
            <choose>
                <when test="realName != null and realName != ''">
                    and realName like concal('%',#{realName},'%')
                </when>
                <when test="roleId != null">
                    and roleId = #{roleId}
                </when>
                <when test=" account != null and accont != '' ">
                    and account like concat('%',#{account},'%')
                </when>
                <otherwise>
                    and YEAR(createdTime) = YEAR(#{createdTime})
                </otherwise>
            </choose>
        </where>

四、foreach标签

MyBatis框架通过foreach标签对这类参数进行循环处理,最终拼接出一个复合MySQL语法的in语句来处理这类参数。

        select *
        from t_sys_user
        where roleId in
        <foreach collection="参数名称" item="元素别名" open="(" separator="," close=")" index="当前元素位置下标">
            #{元素别名}
        </foreach>

语法中的属性介绍如下

属性说明
item遍历数组时,为数组或List集合中的元素起的别名
open起始位置的拼接字符,表示in语句以"("左括号开始
close结束位置的拼接字符,表示in语句以")"右括号开始
Separator元素之间的连接符,表示in语句中的元素之间以",逗号连接
Collection参数名称。

五、set标签

MyBatis框架动态更新数据的功能主要通过set+让标签实现。

        update t_sys_user
        <set>
            <if test="account != null">account = #{account},</if>
            <if test="realName != null">realName = #{realName},</if>
            <if test="password != null">password = #{password},</if>
            <if test="sex != null">sex = #{sex},</if>
            <if test="birthday != null">birthday = #{birthday},</if>
            <if test="phone != null">phone = #{phone},</if>
            <if test="address != null">address = #{address},</if>
            <if test="roleId != null">roleId = #{roleId},</if>
            <if test="createdUserId != null">createdUserId = #{createdUserId},</if>
            <if test="createdTime != null">createdTime = #{createdTime},</if>
            <if test="updatedUserId != null">updatedUserId = #{updatedUserId},</if>
            <if test="updatedTime != null">updatedTime = #{updatedTime},</if>
        </set>

六、trim标签

where、set标签能够动态的为SQL语句添加前后缀,并可以智能的忽略标签前后多余的and、or或逗号等字符。

        update t_sys_user
        <trim prefix="set" suffixOverrides="," suffix="where id = #{id}">
            <if test="account != null">account = #{account},</if>
            <if test="realName != null">realName = #{realName},</if>
            <if test="password != null">password = #{password},</if>
            <if test="sex != null">sex = #{sex},</if>
            <if test="birthday != null">birthday = #{birthday},</if>
            <if test="phone != null">phone = #{phone},</if>
            <if test="address != null">address = #{address},</if>
            <if test="roleId != null">roleId = #{roleId},</if>
            <if test="createdUserId != null">createdUserId = #{createdUserId},</if>
            <if test="createdTime != null">createdTime = #{createdTime},</if>
            <if test="updatedUserId != null">updatedUserId = #{updatedUserId},</if>
            <if test="updatedTime != null">updatedTime = #{updatedTime},</if>
        </trim>

语法中的属性介绍如下

属性说明
prefix前缀,可以自动对trim标签所包含的语句是否有返回值进行判断。如果有返回值,则为SQL语句拼接相应的前缀。
suffx后缀,在trim标签包含的语句末尾拼接后缀。
prefixOverrides忽略的前缀,忽略trim标签内部首部指定的内容。
suffxOverrides忽略的后缀,忽略trim标签内部首部指定的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值