mybatis where 标签使用

mybatis where 标签

我们经常在动态构造sql时,为防止注入或防止语句不当时会使用where 1=1

<select id="selectGroupByEmployeeNum" resultMap="BaseResultMap" parameterType="com.dao.impl.ZcChatGroup">
  	select
		*
	from 
		zc_chat_group 
	WHERE 1=1
	<if test="id!=null">
		id= #{id} 
	</if>
	<if test="leaderNum!=null">
		and leader_num = #{leaderNum} 
	</if>
	<if test="groupType!=null">
		and group_type = #{groupType} 
	</if>
  </select>

但在使用where标签可以简化这条语句

<select id="selectGroupByEmployeeNum" resultMap="BaseResultMap" parameterType="com.dao.impl.ZcChatGroup">
  	select
		*
	from 
		zc_chat_group 
	<where>
		<if test="id!=null">
			id= #{id} 
		</if>
		<if test="leaderNum!=null">
			and leader_num = #{leaderNum} 
		</if>
		<if test="groupType!=null">
			and group_type = #{groupType} 
		</if>
	</where>
  </select>

这条sql执行时,如果id这个参数为null,则这条语句的执行结果为
select * from zc_chat_group where leader_num = ‘xx’ and group_type = ‘xx’

这个‘where’标签会知道如果它包含的标签中有返回值的话,它就会插入一个‘where’。此外,如果标签返回的内容是以AND 或OR开头的,则会把它去除掉。


版权声明:本文为PanTianTianO原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。