Mybatis 小优化 <where>替换 where 1=1

<where> 标签的作用

where标签帮助我们自动的移除了第一个<if>标签内的AND或OR。但是,第二个之后的<if>标签内,必须有AND或OR。

如果没有一个条件符合,则返回所有条目,where不起作用。


举个例子

<select id="idName" parameterType="returnDto" resultType="java.lang.Integer">

    select count(id) from table t

where 1 = 1

   <if test="title != null and title != '' ">

          AND title = #{title}

   </if>

  <if test="name !=null and name != '' ">

         AND name= #{name}

</if>

上面的代码就是查询符合条件的总条数。在mybatis中常用到if标签判断where子句后的条件,为防止首字段为空导致sql报错。当遇到多个查询条件,使用where 1=1 可以很方便的解决我们条件为空的问题.在mysql进行解析优化的时候会处理1 = 1这类无意义的条件将会被优化器所优化掉。这样会增加优化器处理时间。


改进后

<select id="idName" parameterType="returnDto" resultType="java.lang.Integer">

    select count(id) from table t

<where>

    <if test="title != null and title != '' ">
       title = #{title}
   </if>
   <if test="name !=null and name != '' ">
         AND name = #{name}
    </if>
</where>
</select>

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这是一段 SQL 语句中的条件语句,其中 ${ew.sqlsegment} 是一个变量,表示动态生成的 SQL 语句片段。这段代码的作用是在 SQL 查询中添加一个条件语句,但具体的条件是根据变量动态生成的。 ### 回答2: <where> 1=1 ${ew.sqlsegment}</where> 这段代码通常是用于构建 SQL 查询语句的条件部分的。其中,ew 是数据库轻量级操作框架 Mybatis-Plus 中的 EntityWrapper 对象,它可以方便地构建复杂的查询条件。 1=1 表示始终为真,相当于一个占位符,可以作为其他条件的逻辑连接符使用。 而 ${ew.sqlsegment} 则是动态 SQL 语句中的占位符,它会被替换为实际的 SQL 语句。它可以包含任意的 SQL 代码,例如条件语句、循环语句等。Mybatis-Plus 在解析 SQL 时会自动将占位符替换为相应的代码片段。 因此,<where> 1=1 ${ew.sqlsegment}</where> 可以实现拼接 SQL 查询语句的条件部分,同时避免了在生成 SQL 语句时需要手动判断条件是否存在的麻烦,简化了代码实现的难度并提高了开发效率。 总之,这段代码的作用是在进行数据库查询时,方便地构建复杂的查询条件,同时保证 SQL 语句的正确性。 ### 回答3: <where> 1=1 ${ew.sqlsegment}</where>这段代码常出现在Mybatis或其他ORM框架中的动态SQL语句中。其中,${ew.sqlsegment}表示动态SQL片段,可以根据用户传递的参数动态拼接SQL语句,实现灵活的查询条件。 1=1是一种常用的SQL语句写法,它表示条件始终成立,即不影响查询结果。将这个条件写在where子句中,可以避免拼接条件时出现where关键字漏写或者条件个数不确定的问题,简化SQL语句的拼接过程。 将动态SQL片段放在where子句中可以让我们在查询数据时更加灵活,可以根据用户传递的参数来动态拼接SQL语句,实现各种不同的查询条件。比如,我们可以根据用户选择的条件来拼接查询语句,比如根据用户名、邮箱、手机号等字段来查询用户信息,也可以根据时间范围、关键字等条件来查询数据。 总之,<where> 1=1 ${ew.sqlsegment}</where>这段代码的作用是让我们能够灵活地拼接SQL语句,以实现各种不同的查询条件,同时避免了拼接条件时常见的错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值