传统写法,不确定传入参数而写上1=1,确保sql一定正常执行.(where 1=1 非常影响性能)
<select id="getFruitInfo" resultType="Fruit">
SELECT * FROM Fruit
WHERE 1=1
<if test="id!= null">
and id = #{id}
</if>
<if test="name!= null">
and name = #{name}
</if>
</select>
推荐写法,Mybatis里底层已做优化处理.(where标签来解决)
备注:where元素知道只有在一个以上的if条件有值的情况下才去插入“where”子句。
而且,若最后的内容是“AND”或“OR”开头的,where 元素也能识别并将它们去除。
<select id="getFruitInfo" resultType="Fruit">
SELECT * FROM Fruit
<WHERE>
<if test="id!= null">
id = #{id}
</if>
<if test="name!= null">
and name = #{name}
</if>
</WHERE>
</select>
附:where 1=1 对性能的影响
很多时候,使用where 1=1 可以很方便的解决遇到的问题,但很可能会造成巨大的性能损失,
因为使用了 “where 1=1 ”的过滤条件后,就无法使用索引等查询优化策略,
db将被迫对每行数据进行扫描(即全表扫描) 以比较此行是否满足过滤条件,
若表中的数据量较大时候查询速度会非常慢。
因而高手玩家,或者对性能有比较高的要求就不要使用这种传统的方式了。