【mybatis】mybatis中避免where空条件后面添加1=1垃圾条件的 优化方法

本文探讨了在MyBatis中处理动态SQL查询时遇到的问题,特别是如何避免因查询条件缺失而导致的索引失效问题。文章介绍了使用<where>标签来优化动态SQL生成过程的方法,确保即使部分查询条件为空也不会影响查询效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在mybatis中拼接查询语句,偶尔会出现where后面可能一个字段的值都没有,就导致所有条件无效,导致where没有存在的意义;但也有可能这些条件会存在。那解决这个问题的方法,最常见的就是:

在where后面添加1=1

<select id="findActiveBlogLike" resultType="Blog">
 SELECT * FROM BLOG
 WHERE 1=1
 <if test="state != null">
 and state = #{state}
 </if> 
</select>

 

但是这种做法有一个最大的弊端,就是导致数据表上的索引失效,如果有索引的话。而且还是一个垃圾条件

 

所以正确的做法应该是:

使用<where>标签 解决这个问题

where标签会自动处理第一个为null时候的and问题

<select
            id="findUiImage4Map"
            parameterType="com.pisen.cloud.luna.ms.ten.ui.config.base.domain.UiImage"
            resultType="java.util.HashMap">

        select
          uid,
          imgUrl
        from
        ui_image uii
        <where>
            <if test="imgType != null and imgType != '' ">
                AND
                uii.img_type = #{imgType}
            </if>

            <if test="uploadDate != null and uploadDate != '' ">
                AND
                DATE_FORMAT(uii.upload_date,'%Y-%m-%d') = DATE_FORMAT(#{uploadDate},'%Y-%m-%d')
            </if>

        </where>

    </select>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值