并不是很常见,其实是方便之举。
select <include refid="all_column"></include> from sys_cloud_vm
<where>
<trim prefix="" prefixOverrides="AND | OR" suffix="" suffixOverrides="">
<if test="filter.obj.resId != null and filter.obj.resId != '' ">
AND res_id = #{filter.obj.resId}
</if>
<if test="filter.obj.operation != null and filter.obj.operation != '' ">
AND operation = #{filter.obj.operation}
</if>
<if test="filter.obj.moId != null and filter.obj.moId != '' ">
AND mo_id = #{filter.obj.moId}
</if>
</trim>
</where>
这个其实的意思是,prefixoverrids中,当碰到and or开始的前缀的时候,会自动替换,替换成“”(suffix指定的),
这样避免在where 后面拼接不同的字符了,而最后的suffixoverrids中指定的逗号,则是 最后的部分要去掉的,因为SQL语句中,最后部分不会有逗号存在的。
使用示例
<query name="queryCloudVmByParameter" resultMap="HostMap">
select <include refid="all_column"></include> from sys_cloud_vm
<where>
<trim prefixOverrides="AND" >
<if test="filter.obj.resId != null and filter.obj.resId != '' ">
AND res_id = #{filter.obj.resId}
</if>
<if test="filter.obj.operation != null and filter.obj.operation != '' ">
AND operation = #{filter.obj.operation}
</if>
<if test="filter.obj.moId != null and filter.obj.moId != '' ">
AND mo_id = #{filter.obj.moId}
</if>
</trim>
</where>
</query>