<select id="getPushLst" parameterType="PushLstParm" resultMap="BaseResultMap">
SELECT *
FROM push_log
<where>
<if test=" pushContent != null and pushContent != '' ">
and push_content like CONCAT('%',CONCAT(#{pushContent},'%'))
</if>
<if test=" pushType != null and pushType != '' ">
and push_type = #{pushType}
</if>
<if test=" groupId != null and groupId != '' ">
and FIND_IN_SET(#{groupId},group_ids)
</if>
<if test=" regStartTime != null and regStartTime != '' and regEndTime != null and regEndTime != '' ">
and create_time BETWEEN #{regStartTime} AND #{regEndTime}
</if>
<if test=" 1 == 1 ">
and is_deleted = 0 or is_deleted is null
</if>
</where>
order by create_time DESC LIMIT #{navOffset}, #{navPageSize}
</select>
类似的必须有一个固定条件和其他条件组装的时候查询总是查询出所有的问题,其实关键点在于最后一个判断条件他是两个条件,我们平时习惯这么写但是在判断语句中并不能这么判断,正确的写法是吧最后一句改成如下:
<if test=" 1 == 1 ">
and (is_deleted = 0 or is_deleted is null)
</if>