MyBatis的各种动态sql写法以及各种动态sql所需使用的标签

本文详细介绍了MyBatis中包括foreach、where、sql、trim、choose、set、concat、selectKey和bind在内的动态SQL标签及其用法。通过示例展示了如何在实际操作中运用这些标签进行动态SQL构建,同时也提到了批量操作和类别名的设置。欢迎大家补充更多动态SQL知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MyBatis的各种动态sql写法

1、各种动态sql所需使用的标签

1.foreach 标签

首先在mapper中接收到的方法参数应该是list、map或者array类型的。

使用方法如下

<foreach  item="item" collection="list" index="index"  open="(" separator="," close=")">
	#{item}
</foreach>
<!--
    # item表示集合中每一个元素进行迭代时的别名.

    # index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置.

    # collection 为传进来的collection参数的 *类型*

    # open表示该语句以什么开始

    # separator表示在每次进行迭代之间以什么符号作为分隔符

    # close表示以什么结束
-->

<!--
    如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
    如果传入的是单参数且参数类型是一个Array数组的时候,collection属性值为array
-->

2.where标签

<!-- 此处配置了别名,因此参数类型以及返回值类型可以使用简略写法-->
<!--使用where标签时,第一个if标签中的sql语句,可以省略and关键字-->
<select id="findUserByWhere" resultType="user" parameterType="user">
	select * from user
	<where>
		<if test="username != null">
			username = #{username}
		</if>
		<if test="sex != null">
			and sex = #{sex}
		</if>
	</where>
</select>

3. sql标签

Sql 中可将重复的 sql 提取出来,使用时用 include 引用即可,最终达到 sql 重用的目的

使用方法如下

   <sql id="userInfoColumnsList">
        <trim suffixOverrides=",">
            <if test="item.userName != null">userName,</if>
            <if test="item.age != null">age,</if>
            <if test="item.sex != null">sex,</if>
            <if test="item.salary != null">salary,</if>
            <if test="item.completed != null">completed,</if>
            <if test="item.remark != null">remark</if>
        </trim>
    </sql>
    <sql id="userInfoValuesList">
        <trim suffixOverrides=",">
            <if test="item.userName != null">#{item.userName},</if>
            <if test="item.age != null">#{item.age},</if>
            <if test="item.sex != null">#{item.sex},</if>
            <if test="item.salary != null">#{item.salary},</if>
            <if test="item.completed != null">#{item.completed},</if>
            <if test="
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值