返回顶部
首页 > 资讯 > 精选 >Mybatis中where标签与if标签怎么结合使用
  • 328
分享到

Mybatis中where标签与if标签怎么结合使用

2023-07-05 08:07:26 328人浏览 安东尼
摘要

这篇文章主要介绍“mybatis中where标签与if标签怎么结合使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Mybatis中where标签与if标签怎么结合使用”文章能帮

这篇文章主要介绍“mybatis中where标签与if标签怎么结合使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Mybatis中where标签与if标签怎么结合使用”文章能帮助大家解决问题。

使用<where>标签

select筛选出视图对象的参数,用于给前端返回页面参数使用。

<sql id="selectFileVo">        select file_id,               uuid,               file_name,               file_url,               status,               create_time,               update_time        from file    </sql>

以下代码格式是正确,我们先观察下and或者or的位置。

    <select id="selectFileList" parameterType="File" resultMap="FileResult">        <include refid="selectFileVo"/>        <where>            <if test="fileName != null  and fileName != ''">                and file_name like concat('%', #{fileName}, '%')            </if>            <if test="status != null  and status != ''">                and status = #{status}            </if>            <if test="params.beginCreateTime != null and params.beginCreateTime != '' and params.endCreateTime != null and params.endCreateTime != ''">                and create_time between #{params.beginCreateTime} and #{params.endCreateTime}            </if>        </where>    </select>

再看一下错误的写法;

    <select id="selectFileList" parameterType="File" resultMap="FileResult">        <include refid="selectFileVo"/>        <where>            <if test="fileName != null  and fileName != ''">                file_name like concat('%', #{fileName}, '%') and            </if>            <if test="status != null  and status != ''">                status = #{status} and             </if>            <if test="params.beginCreateTime != null and params.beginCreateTime != '' and params.endCreateTime != null and params.endCreateTime != ''">                create_time between #{params.beginCreateTime} and #{params.endCreateTime}            </if>        </where>    </select>

这时候运行该代码,当beginCreateTimeendCreateTime为空时,我们会发现报错SQL执行异常,原因是where多了一个and

总结

<if>标签判断失败后, <where> 标签关键字可以自动去除掉库表字段赋值前面的and,不会去掉语句后面的and关键字,即<where> 标签只会去掉<if> 标签语句中的最开始的and关键字。所以上面的写法(and写在后面)是不符合mybatis规范的。

不使用<where>标签

当不使用<where>标签时,正确的写法可以参考以下代码:

<select id="selectFileList" parameterType="File" resultMap="FileResult">        <include refid="selectFileVo"/>        where 1=1         <if test="fileName != null  and fileName != ''">            and file_name like concat('%', #{fileName}, '%')        </if>        <if test="status != null  and status != ''">            and status = #{status}        </if>        <if test="params.beginCreateTime != null and params.beginCreateTime != '' and params.endCreateTime != null and params.endCreateTime != ''">            and create_time between #{params.beginCreateTime} and #{params.endCreateTime}        </if>    </select>

此时我们发现and是写在前面的,同时增加了1=1条件。

如果我们去掉1=1条件,同时去掉第一个<if>标签的and

<select id="selectFileList" parameterType="File" resultMap="FileResult">        <include refid="selectFileVo"/>        where         <if test="fileName != null  and fileName != ''">            file_name like concat('%', #{fileName}, '%')        </if>        <if test="status != null  and status != ''">            and status = #{status}        </if>        <if test="params.beginCreateTime != null and params.beginCreateTime != '' and params.endCreateTime != null and params.endCreateTime != ''">            and create_time between #{params.beginCreateTime} and #{params.endCreateTime}        </if>    </select>

这种情况下,当fileName为空时,sql语句中会出现where and这种错误的语法,最终导致sql执行异常。所以正确的代码中,使用1=1条件,当fileName为空时,sql语句就会变成where 1=1 ,后面接不接and都能正确执行。

在不使用<where>标签的情况下,and写在后面,在where条件最后增加1=1判断,原理和上面一样,这里就不再赘述了。

关于“Mybatis中where标签与if标签怎么结合使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: Mybatis中where标签与if标签怎么结合使用

本文链接: https://lsjlt.com/news/350616.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Mybatis中where标签与if标签怎么结合使用
    这篇文章主要介绍“Mybatis中where标签与if标签怎么结合使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Mybatis中where标签与if标签怎么结合使用”文章能帮...
    99+
    2023-07-05
  • Mybatis中where标签与if标签结合使用详细说明
    目录前言使用<where>标签总结不使用<where>标签总结前言 由于不小心将and或者or写在了语句后面,导致mybatis无法自主判...
    99+
    2023-03-03
    mybatis where标签 mybatis where mybatis if标签
  • mybatis的where标签怎么使用
    本篇内容主要讲解“mybatis的where标签怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mybatis的where标签怎么使用”吧!我们经常在动态构造sql时,...
    99+
    2023-06-29
  • Mybatis的where标签使用总结梳理
    目录背景原始的手动拼接Mybatis where标签的使用进阶:自定义trim标签where语句的坑小结背景 在上篇文章,我们系统地学习了where 1...
    99+
    2024-04-02
  • Mybatis的where标签如何使用
    这篇文章主要讲解了“Mybatis的where标签如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Mybatis的where标签如何使用”吧!原始的手动拼接在不使用...
    99+
    2023-06-30
  • Mybatis动态SQL之where标签用法说明
    目录关于where标签用法使用where标签及一些注意点where标签简单使用关于where标签用法 xml映射文件部分内容: <sel...
    99+
    2024-04-02
  • Mybatis中typeAliases标签和package标签使用
    目录typeAliases标签和package标签的使用1、typeAliases2、packageproperties,typeAliases,package三个标签使用以及细节t...
    99+
    2024-04-02
  • Mybatis的mapper.xml中if标签test判断怎么使用
    本文小编为大家详细介绍“Mybatis的mapper.xml中if标签test判断怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mybatis的mapper.xml中if标签test判断怎么使用”文章能帮助大家解决疑惑,下面跟着小...
    99+
    2023-07-01
  • MyBatis动态<if>标签的使用
    目录前言正文一. if标签判断字符串二. if标签判断数字总结前言 MyBatis中的<if>动态SQL标签,常用场景是根据条件添加WHERE子句。本篇文章将对&...
    99+
    2023-05-19
    MyBatis动态<if>标签 MyBatis <if>标签
  • MyBatis动态<if>标签如何使用
    这篇文章主要介绍“MyBatis动态<if>标签如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MyBatis动态<if>标签如何使用”文章能帮助大家解决问题。一. i...
    99+
    2023-07-05
  • Mybatis的xml中使用if/else标签的具体使用
    目录使用if标签进行查询where标签出场if/else 使用 choose,when,otherwise 代替使用if标签进行查询 SELECT ord...
    99+
    2024-04-02
  • mybatis中<choose>标签怎么使用
    本文小编为大家详细介绍“mybatis中<choose>标签怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“mybatis中<choose>标签怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-06-30
  • Mybatis中动态SQL,if,where,foreach怎么用
    这篇文章主要为大家展示了“Mybatis中动态SQL,if,where,foreach怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Mybatis中动态SQL,if,wher&#...
    99+
    2023-05-30
    mybatis sql
  • Mybatis sqlMapConfig.xml中的mappers标签使用
    目录sqlMapConfig.xml中的mappers标签mappers(映射配置)1.1:通过resource加载单个映射文件1.2:通过mapper接口加载单个映射文件1.3:批...
    99+
    2024-04-02
  • 怎么在MyBatis中使用动态SQL标签
    这篇文章将为大家详细讲解有关怎么在MyBatis中使用动态SQL标签,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.MyBatis动态SQLMyBatis 的强大特性之一便是它的动态 SQ...
    99+
    2023-06-14
  • Mybatis中怎么配置typeAlias标签
    Mybatis中怎么配置typeAlias标签,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Mybatis typeAlias标签在实际的工程之中,类的全限定名...
    99+
    2023-06-20
  • 怎么使用MyBatis的动态SQL标签
    MyBatis的动态SQL标签可以帮助我们在SQL语句中根据条件来动态生成不同的SQL片段,从而实现更灵活的查询。 下面是一些MyB...
    99+
    2024-04-09
    MyBatis
  • MyBatis常用标签以及使用技巧总结
    前言 MyBatis常用标签及标签使用技巧 MyBatis的常用标签有很多,比如 <sql id="">:预定义可以复用的sql语句 <include refid=...
    99+
    2024-04-02
  • HTML中文本标签、超链接标签、图片标签怎么用
    这篇文章将为大家详细讲解有关HTML中文本标签、超链接标签、图片标签怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。   1、简介   在Web应用中,服务器把网...
    99+
    2024-04-02
  • HTML5的audio标签和video标签怎么使用
    这篇文章主要介绍了HTML5的audio标签和video标签怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇HTML5的audio标签和video标签怎么使用文章都会有所...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作