Mybatis的mapper文件, 不要where 1=1,影响性能,改用<where>标签

传统写法,不确定传入参数而写上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将被迫对每行数据进行扫描(即全表扫描) 以比较此行是否满足过滤条件,
若表中的数据量较大时候查询速度会非常慢。
因而高手玩家,或者对性能有比较高的要求就不要使用这种传统的方式了。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值