From: https://blog.csdn.net/wobuaizhi/article/details/81874664

在使用mybatis的动态sql时,有时候遇到根据条件判断添加where后面的筛选条件。

会出现多余的“and”或者“or”,如下:

<select id="findBlog"
         resultType="Blog">
      SELECT * FROM BLOG
      WHERE
      <if test="state != null">
        state = #{state}
      </if>
      <if test="title != null">
        AND title like #{title}
      </if>
    </select>

如果第一个参数“state”为空,那么sql会变成下面这样,

select * from blog where and title like

如果两个if都为空,那么输出为,

select * from blog where

显然这样的sql执行时,会发生错误。

这时候使用where标签就可以解决这个问题,

<select id="findBlog"
         resultType="Blog">
      SELECT * FROM BLOG
      <where>
        <if test="state != null">
             state = #{state}
        </if>
        <if test="title != null">
            AND title like #{title}
        </if>
      </where>
    </select>

where 元素只会在至少有一个子元素的条件返回 SQL 子句的情况下才去插入“WHERE”子句。而且,若语句的开头为“AND”或“OR”,where 元素也会将它们去除。

当然我们也可以用“trim”标签来处理。

<trim prefix="WHERE" prefixOverrides="AND |OR ">
      ...
    </trim>

prefix:前缀, prefixoverride:去掉第一个“and”或者是“or”

“trim”标签还有其他属性,

suffixoverride:去掉最后标记的字符(就像是上面的and一样)

suffix:后缀

参考文献:http://www.mybatis.org/mybatis-3/zh/dynamic-sql.html

mybatis动态sql中的where标签的使用相关推荐

  1. mybatis动态sql中的trim标签的使用

    trim标记是一个格式化的标记,可以完成set或者是where标记的功能,如下代码: 1. select * from user <trim prefix="WHERE" p ...

  2. Mybatis动态sql中的foreach标签的使用

    foreach 标签一般用于遍历集合,构建in条件语句或者批量操作语句 <insert id="batchSave" parameterType="java.uti ...

  3. mybatis动态sql中where标签的使用

    where标记的作用类似于动态sql中的set标记,他的作用主要是用来简化sql语句中where条件判断的书写的,如下所示: <select id="selectByParams&qu ...

  4. Mybatis 动态sql语句(if标签和where标签)

    功能:根据性别和名字查询用户 查询sql语句: SELECT id, username, birthday, sex, address FROM `user` WHERE sex = 1 AND us ...

  5. mybatis动态sql中的if、where、choose、trim、foreach方法

    mybatis笔记03 1.动态sql语句–>sql拼接 1.1 if方法 相当于el表达式中的if(){}语句 参数类型不同,if标签中test的参数是怎么说明的呢? 1)如果参数的类型是数字 ...

  6. 使用动态SQL中的if标签做条件判断的几种用法和注意点

    使用中踩到的坑记录一下(大神请略过,我只是个菜菜,忽喷!!!万分感谢!!!) <mapper namespace="dynamic"><resultMap id= ...

  7. 详解mybatis动态SQL

    什么是动态SQL? 动态 SQL 是 MyBatis 的强大特性之一.顾名思义,就是会动的SQL,即是能够灵活的根据某种条件拼接出完整的SQL语句.这种类似于MySQL中的 case when the ...

  8. MyBatis——动态SQL语句——if标签和where标签复合使用

    功能需求 根据性别和名字查询用户 官方文档 MyBatis--动态 SQL SQL语句 SELECT id, username, birthday, sex, address FROM `user` ...

  9. mybatis动态SQL多条件查询1 - if 标签

    Mybatis框架的动态SQL技术是一种根据特定条件动态拼接SQL语句的过程.它的存在是为了解决拼接SQL语句字符串的痛点问题.创建新的Mapper接口和新的mapper映射文件. 目录 1.创建Dy ...

最新文章

  1. Spring 容器的启动过程
  2. How to make app start automatically When the application starts
  3. 4g模块注册上网 移远_Openwrt实现4G模块上网功能
  4. python3 安装opencv_Page20-opencv的编译与安装
  5. cygwin安装skyeye 所需的软件包列表
  6. STL sector 应用
  7. 修复Bug大幅升级 Sun发布MySQL 5.1版
  8. 将Matlab换成Pycharm风格
  9. 弹性力学经典解法与有限元法的不同特点
  10. php电子面单打印快递100,使用快递100软件打印电子面单设置操作教程
  11. 机器学习 特征选择(过滤法 封装法 嵌入法)
  12. 关于铁路订票系统如何改善设计的讨论
  13. 【Nodejs】使用request批量下载MP3,文件数量内容都没问题
  14. 面对对象原则:高内聚、低耦合
  15. python discuz_[Python代码]Discuz!论坛(X2.5)发帖及回复脚本
  16. Three.js入门——画星空(star field)
  17. 迭代扩展卡尔曼滤波学习
  18. 【解决】ERROR Failed to compile with 1 error;error in ./node_modules/pdfjs-dist/build/pdf.js
  19. Redis删除过期数据的策略概要
  20. ”你谁啊?“ ”我CPU啊,你刚才还看我呢。“

热门文章

  1. vSphere5.5安装教程
  2. ubuntu 手动安装mysql
  3. Office 365身份认证管理-添加并验证联合认证域
  4. 分享一个自定义的 console 类,让你不再纠结JS中的调试代码的兼容
  5. 2027. 转换字符串的最少操作次数
  6. mysql 数据库 安全_如何确保您MySQL数据库安全
  7. linux中安装robot环境
  8. lamp架构,搭建一个网络平台
  9. Centos7 安装oracle数据库
  10. HTML5 文件域+FileReader 分段读取文件(四)