• 【Mybatis】Mybatis中避免where空条件后面添加1=1 优化方法


    在mybatis中拼接查询语句,偶尔会出现where后面可能一个字段的值都没有,就导致所有条件无效,导致where没有存在的意义;但也有可能这些条件会存在。

    1. 占位符
      • 那解决这个问题的方法,最常见的就是:在where后面添加1=1
        <select id="findByConnectorPrice" parameterType="com.hlht.evcs.bean.ConnectorPriceRelation"
                resultMap="BaseResultMap">
            select
            p.customer_operator_id,
            p.connector_id,
            p.template_id,
            p.relate_time,
            p.charge_operator_id
            from
            in_connector_price_relation p
            where 1=1
            <if test="CustomerOperatorId != null and CustomerOperatorId!='' ">
                and p.customer_operator_id = #{CustomerOperatorId}
            </if>
            <if test="ConnectorId != null and ConnectorId!='' ">
                and p.connector_id = #{ConnectorId}
            </if>
            order by ${RelateTime} desc
        </select>
    

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

    1. 占位符
      • 所以正确的做法应该是:使用标签 解决这个问题
      • where标签会自动处理第一个为null时候的and问题
    <select id="findByConnectorPrice" parameterType="com.hlht.evcs.bean.ConnectorPriceRelation"
                resultMap="BaseResultMap">
            select
            p.customer_operator_id,
            p.connector_id,
            p.template_id,
            p.relate_time,
            p.charge_operator_id
            from
            in_connector_price_relation p
            <where>
                <if test="CustomerOperatorId != null and CustomerOperatorId!='' ">
                    and p.customer_operator_id = #{CustomerOperatorId}
                </if>
                <if test="ConnectorId != null and ConnectorId!='' ">
                    and p.connector_id = #{ConnectorId}
                </if>
            </where>
            order by p.relate_time desc limit 1
        </select>
    
  • 相关阅读:
    supervisor启动错误解决(二)
    删除文件某行
    离线安装
    docker中/var/lib/docker目录迁移
    if else 使用
    Django views函数添加装饰器
    Netty4
    Fast DFS(二)
    Fast DFS(一)
    SpringBoot和app之间跨域问题
  • 原文地址:https://www.cnblogs.com/Twittery/p/14299132.html
Copyright © 2020-2023  润新知