Mybatis的动态SQL

SQL标签

  • foreach
  • where
  • set
  • if
  • choose when otherwise
  • trim
  • bind

foreach标签

属性:

  • collection:当输入参数为List类型时,其值为list;当参数为数组时,其值为array
  • item:集合里每一项的名称
  • separator:每一项之间的分隔符
  • open:执行循环体之前拼接的字符
  • close: 执行循环体之后拼接的字符
<!-- 批量插入 -->
<insert id="insertUser" parameterType="java.util.List">
	insert into user (username,birthday,sex,address) values
	<foreach collection="list" item="item" separator=",">
		(#{item.username},#{item.birthday},#{item.sex},#{item.address})
	</foreach>
		
</insert>

<!-- 批量查询 -->
<select id="selectMuiltUser" parameterType="java.util.Arrays" resultType="user">
	select * from user where id in 
	<foreach collection="array" item="item" separator="," open="(" close=")">
		#{item}
	</foreach>
</select>

其中输入参数parameterType可以省略

where标签

where标签一般和if标签连用,一般情况if标签不会单独使用

where标签在条件成立的情况下会自动拼接where关键字,如果多个条件成立,会自动去掉where后面的第一个and

<!--根据姓名或者性别查询-->
<select id="selectByUsernameOrSex" resultType="user" parameterType="map">
	select * from user
	<where>
		<if test="username!=null and username!=''">
			and username=#{username}
		</if>
		<if test="sex!=null and sex!=''">
			and sex=#{sex}
		</if>
	</where>
</select>

set标签

set标签一般也和if标签连用

set标签会自动拼接set关键字,会自动去掉最后条件里面的一个逗号

<update id="updateUser" parameterType="user">
	update user
	<set>
		<if test="username!=null and username!=''">
			username=#{username},
		</if>
		<if test="sex!=null and sex!=''">
			sex=#{sex},
		</if>
	</set>
	where id=#{id}
</update>

choose when otherwise标签

只有一个when或otherwise条件会执行,类似逻辑判断中的if(){}else if(){}else{}

<select id="getByNameOrSexbak" parameterType="map" resultType="user">
    select * from user where
    <choose>
       <when test="uname!=null and uname!=''">
           username like '%${uname}%'
       </when>
       <when test="usex!=null and usex!=''">
           sex=#{usex}
       </when>
       <otherwise>
          1=1
       </otherwise>
    </choose>
</select>

trim标签

trim标签用来格式化SQL语句

属性:

  • prefix:前缀
  • suffix:后缀
  • prefixOverrides:忽略前缀
  • suffixOverrides:忽略后缀
<update id="updUserbak" parameterType="user">
   <trim prefix="update user set" suffix="where    id=#{id}" suffixOverrides=",">
      <if test="username!=null and username!=''">
          username=#{username},
      </if>
      <if test="sex!=null and sex!=''">
          sex=#{sex},
      </if>
   </trim>
</update>

bind标签

bind:中文解释是捆绑的意思,所以它的作用是拼接字符串,在输入参数前或后拼接

属性:

  • name:新的字符串名称
  • value:新的字符串的值,获取通过_parameter得到
<select id="selectByName" parameterType="user" resultType="User">
    <bind name="uname" value="'%'+_parameter.getUsername()+'%'"/>
    select * from user where username like #{uname}
</select>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值