mybatis 为什么千万不要使用 where 1=1

 更新时间:2021年05月01日 09:10:58   作者:eguid_1  
这篇文章主要介绍了mybatis 为什么千万不要使用 where 1=1,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1.解决方案

下面是mybatis查询语句,如果我们这次我们将 “state = ‘ACTIVE'” 设置成动态条件,看看会发生什么。

<select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG
  WHERE
  <if test="state != null">
    state = #{state}
  </if>
  <if test="title != null">
    AND title like #{title}
  </if>
  <if test="author != null and author.name != null">
    AND author_name like #{author.name}
  </if>
</select>

如果没有匹配的条件会怎么样?最终这条 SQL 会变成这样:

SELECT * FROM BLOG
WHERE

这会导致查询失败。如果匹配的只是第二个条件又会怎样?这条 SQL 会是这样:

SELECT * FROM BLOG
WHERE
AND title like ‘someTitle'

这个查询也会失败。这个问题不能简单地用条件元素来解决。这个问题是如此的难以解决,以至于解决过的人不会再想碰到这种问题。

MyBatis 有一个简单且适合大多数场景的解决办法。而在其他场景中,可以对其进行自定义以符合需求。而这,只需要一处简单的改动:

<select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG
  <where>
    <if test="state != null">
         state = #{state}
    </if>
    <if test="title != null">
        AND title like #{title}
    </if>
    <if test="author != null and author.name != null">
        AND author_name like #{author.name}
    </if>
  </where>
</select>

 where 元素只会在子元素返回任何内容的情况下才插入 “WHERE” 子句。而且,若子句的开头为 “AND” 或 “OR”,where 元素也会将它们去除。

2.为什么不能使用1=1

1.会导致表中的数据索引失效
2.垃圾条件,没必要加

3.官方文档地址

mybatis官网地址

到此这篇关于mybatis 为什么千万不要使用 where 1=1的文章就介绍到这了,更多相关mybatis where1=1内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java中的常用集合类整理

    java中的常用集合类整理

    在本篇文章里小编给大家整理的是关于java中的常用集合类的相关知识点内容,有兴趣的朋友们学习下。
    2019-12-12
  • Java中String字符串常量池和intern方法源码分析

    Java中String字符串常量池和intern方法源码分析

    在之前的文章中,小编给大家介绍了String字符串的不可变性及其实现原理,其中给大家提到了字符串常量池的概念,那么什么是常量池,String字符串与常量池有什么关系,本文给大家唠唠字符串常量池及String#intern()方法的作用,需要的朋友可以参考下
    2023-05-05
  • springboot vue测试平台接口定义前后端新增功能实现

    springboot vue测试平台接口定义前后端新增功能实现

    这篇文章主要介绍了springboot vue测试平台接口定义前后端新增功能实现,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Spring的初始化和XML解析的实现

    Spring的初始化和XML解析的实现

    这篇文章主要介绍了Spring的初始化和XML解析的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • Java网络编程之IO模型阻塞与非阻塞简要分析

    Java网络编程之IO模型阻塞与非阻塞简要分析

    这篇文章主要介绍Java网络编程中的IO模型阻塞与非阻塞简要分析,文中附有示例代码,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-09-09
  • JAVA多线程实现的四种方式及使用场景详解

    JAVA多线程实现的四种方式及使用场景详解

    这篇文章主要介绍了JAVA多线程实现的四种方式及使用场景,并举例说明了在管理系统中多线程的应用场景,如数据导入导出、数据缓存更新、并发用户操作处理、系统监控和定时任务执行,需要的朋友可以参考下
    2025-01-01
  • List调用toString()方法后,去除两头的中括号实例

    List调用toString()方法后,去除两头的中括号实例

    下面小编就为大家带来一篇List调用toString()方法后,去除两头的中括号实例。希望对大家有所帮助。一起跟随小编过来看看吧
    2017-03-03
  • 详解java如何解析和生成sql

    详解java如何解析和生成sql

    JSQLParser 是一个开源的 Java 库,用于解析 SQL 语句并将其转换为抽象语法树,下面我们就来看看java是如何使用JSQLParser解析和生成sql的吧
    2024-12-12
  • 关于SpingMVC的<context:component-scan>包扫描踩坑记录

    关于SpingMVC的<context:component-scan>包扫描踩坑记录

    这篇文章主要介绍了关于SpingMVC的<context:component-scan>包扫描踩坑记录,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • 详解Spring DI依赖注入的方式和类型

    详解Spring DI依赖注入的方式和类型

    这篇文章主要介绍了详解Spring DI依赖注入的方式和类型,DI是由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台,需要的朋友可以参考下
    2023-05-05

最新评论