mybatis动态sql

使用动态sql可简化代码开发,减少开发者的工作量,程序可以自动动根据业务参数来决定sql的组成。

1、if和where标签

  • if 标签可以自动根据表达式的结果来决定 是否将语句添加到sql中,如果条件不成立则不添加,如果条件成立则添加。
  • where ** 标签可以自动判断是否要删除语句块中的and关键字,如果检测到where**直接跟 and拼接,则自动删除 and
  • 总结:if标签使用时,如果sql语句中的whereand相连,这事需要使用where标签来将and删掉,所以往往ifwhere标签一起使用。
<mapper>
<select id=" " parmeterType="...model">
	select from t_account 
	<where>
		<if test="id !=0>//如果id不为0
			id=#{id}
		</if>
		<if test="username !=null">
			and username=#{uaername}
		</if>
		<if test="pasword!=null">
			and password =#{password}
		</if>
	</where>
	
</select>
</mapper>

2、choose和when标签

  • 如果第一个when成立就不会执行下一个when
<mapper>
<select id=" " parmeterType="...model">
	select from t_account 
	<where>//
		<choose>
		<when test="id !=0>//如果id不为0
			id=#{id}
		</when >
		<when test="username !=null">
			username=#{uaername}
		</when >
		<when test="pasword!=null">
			password =#{password}
		</when >
		</choose>
	</where>
	
</select>
</mapper>

3、trim标签

  • trimwhere功能类似,用来处理动态关键字是否要添加
  • trim 标签中的prefixsuffix属性会被用于生成实际的sql语句,会和标签内部的语句进行拼接,如果语句前后出现了preffix Overrides或者suffix Overrides属性中指定的值,Mybatis框架会自动将其删除。
<mapper>
<select id=" " parmeterType="...model" resultType="...model">
	select from t_account 
	<trim prefix="where" preffixOverrides="and">//如果发现where和and连接,就会把and删掉
		<if test="id !=0">
			id=#{id}
		</if>
		<if  test="username !=null">
			and username=#{username}
		</if>
		<if  test="passowrd!=null">
			and passowrd=#{passowrd}
		</if>
	</trim>
	
</select>
</mapper>

4、set标签

  • set标签用于update操作,会自动根据参数选择生成sql语句
  • 原始sql语句,没有set标签
<mapper>
<update id=" " parmeterType="...model" >
	update t_account set username=#{username},password=#{password} where id=#{id}
</update>
</mapper>
  • 添加set标签之后的update语句
<mapper>
<update id=" " parmeterType="...model" >
   update t_account
    <set>
    	<if test="username != null">
    		username=#{username},
    	</if>
    	<if test="password!= null">
    		password=#{password}
    	</if>
    </set> 
    where id=#{id}
</update>
</mapper>

5、foreach标签

  • 作用:foreach标签可以迭代生成一系列值,主要用于sql的in语句。
  • mysql中查询的语句:select* form t_account where id=1 or id=2 or id=3
    或者 select * from t_account where id in (1,4,5)
    加入foreach后如下
  • 首先要在实体类中加id集合变量 例:private List ids;
<mapper>
<select id=" " parmeterType="...model" resultType=“...model” >
   select * from t_account where id in (1,4,5)
    <where>
    		<foreach cllection="ids" open="id in (" close=")" item="id" separator=","> //open中写的是数据集合之前where关键字之后放入内容,同理close是数据集合之后的内容,cllection是集合的名称,item是变量名
    		</foreach>
    </where> 
</select >
</mapper>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值