首页 > 其他分享 >Mybatis的<where>,<if>等标签用法

Mybatis的<where>,<if>等标签用法

时间:2023-09-16 12:32:24浏览次数:35  
标签:name nickName 标签 用法 拼接 sql Mybatis where

上节有介绍Mybaits传入参数不同类型的时候,对应的处理方法,这节要说下处理方法时候还会用到的另外几个标签,比如<where> ,<if>等。

我们首先说下<if>标签,看名字就知道是用来做判断的,放传入的参数为null或者为空字符串时,我们不希望它3参与筛选,我们可以用<if>标签过滤掉值为null或者是空字符串的字段。例如:

<select id="getUsers" parameterType="User" resultType="User">
    SELECT * FROM sys_user where 1=1
    	<if test="name != null and name != ''">
   	 		AND name = #{name}
    	</if>
</select>

在这里通过判断User对象中的name值是否为null或者是空字符串再决定是否需要拼接上此条件,就实现了对不符合条件的字段进行过滤了。不过可以注意到这里的sql中有加where 1=1,这个比较奇怪的写法是因为如果下面的name字段判断成立则需要加where,如果不成立则不需要加where,那么在写xml文件的时候就并不知道是否需要加上where了,只能通过添加1=1的方式,即使后面不成立,1=1总是成立的不会影响查询结果。如果成立的话,后面拼接上and name = #{name}也是没问题的。这里为了改善这种写法就引入了<where>标签。,它专为针对这种情况而产生的,通过<where>标签,这段xml可以修改成这样:

<select id="getUsers" parameterType="User" resultType="User">
    SELECT * FROM sys_user 
    <where>
    	<if test="name != null and name != ''">
   	 		AND name = #{name}
    	</if>
    </where>
</select>

下面再说一种用于逻辑的标签<choose>,它类似java代码中的switch-case语句,在<choose>标签中有多中可能,根据条件当一种情况成立时拼接此条件下的sql。否则拼接<otherwise>中的sql,例如:

<select id="getUserList" parameterType="User" resultType="User">
  SELECT * FROM sys_user
  <where>
    <choose>
      <when test="name != null and name != null">
        AND name = #{name}
      </when>
      <when test="nickName != null and nickName != null">
        AND nickName = #{nickName}
      </when>
      <otherwise>
        AND id = #{id}
      </otherwise>
    </choose>
  </where>
</select>

这里大概意思是,如果name的值有效就用name这一个过滤条件,如果name值无效,则使用nickName,如果name和nickName都无效就用id过滤。除此之外,用于处理sql逻辑的标签还有<trim>(取出多余字符),<bind>(拼接变了数据)等。不过这些不经常使用,想要了解的小伙伴可以去搜索下用法。

标签:name,nickName,标签,用法,拼接,sql,Mybatis,where
From: https://blog.51cto.com/BakerZhuang/7492432

相关文章

  • mybatis
    mybatis执行流程原理Mybatis底层封装了JDBC,使用了动态代理模式。创建SqlSession,执行Executormybatis 缓存一级缓存(本地缓存)sqlSession级别的缓存,一级缓存一直是开启的,它实质上就是sqlSession级别的一个Map与数据库同一次会话期间查询到的数据会放在本地缓存中,以后如果需......
  • 【标签】杂项
    edit题目异或Hash求区间覆盖数+卡特兰数\(B^-\)......
  • STL常用容器用法总结
    vector变长数组,倍增的思想size()返回元素个数empty()返回是否为空clear()清空front()/back()push_back()/pop_back()begin()/end()[]支持比较运算,按字典序pair<int,int>first,第一个元素second,第二个元素支持比较运算,以first为第一关键字,以second为第二关......
  • MybatisPlus之prim标签
    MybatisPlus之trim标签<trimprefix=""suffix=""suffixOverrides=""prefixOverrides=""></trim>prefix:在trim标签内sql语句加上前缀。suffix:在trim标签内sql语句加上后缀。prefixOverrides:指定去除多余的前缀内容suffixOverrides:指定去除多余的后缀内容,如:s......
  • less-基础用法
    什么是less?less,suss,stylus都是css的动态扩展语言.三种都大同小异官网:https://less.nodejs.cn/怎么用?与Node.js一起使用:安装:npminstall-gless编译:lesscstyles.lessstyles.css在浏览器使用:<linkrel="stylesheet/less"type="text/css"href=......
  • C++中STL用法汇总
    1什么是STL?STL(StandardTemplateLibrary),即标准模板库,是一个具有工业强度的,高效的C++程序库。它被容纳于C++标准程序库(C++StandardLibrary)中,是ANSI/ISOC++标准中最新的也是极具革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大C++程......
  • 神奇均线的实战用法——指标实战
    神奇均线的公式如下:VAR1:=(2*C+H+L+O)/5;A1:=(EMA(VAR1,5)+EMA(VAR1,8)+EMA(VAR1,13)+EMA(VAR1,21))/4;A2:=EMA(A1,2);A3:=EMA(A2,2);A4:=EMA(A3,2);A5:=EMA(A4,2);A6:=EMA(A5,2);中线:EMA(A6,2);短线1:EMA(VAR1,2.78)*1.028;短线2:MA(O,3.2)*1.028;安全线:EMA(C,55),C......
  • Vue--this的指代问题及用法
    Vue--this的指代问题及用法this在普通函数(function(){})里,指代调用该函数(方法)的对象this在箭头函数(()=>{})里,指代定义该箭头函数的外层对象在axios调用当前vue实例的data:axios回调函数(.then())是在执行栈中被执行,其中this指向window,若要在axios中取后端数据并......
  • 基于springboot与mybatis的健身器材批发管理系统的设计与实现
    研究的背景意义随着互联网技术的发展,各种类型的管理系统深入到人们的工作学习中,不再是最初的资料查询、在线沟通等简单形式的应用。各种统计分析、物联网、人工智能、AI等技术越来越多,特别典型的就是网上商城。电子商城也分为多种类型,包括B2B、B2C、C2C等。还有我们常见的批发商城......
  • 【标签】可以改编+改进的题
    编辑题目一道明显可以加强数据的题目......