Mybatis 动态SQL 之 if 标签用法

mybatis的if判断语句其实跟el表达式的if条件判断有些类似。

例如: <if test="id != null"> </if>

1 如果参数为数字类型的时候没有特殊需求的情况只需要判断是否为null即可。

例如:<if test="id != null"></if>

 如果有特殊需求,例如判断是否大于某个数的时候才行。只需要加上对应的条件判断即可

例如:<if test='id != null and id > 28'></if>

 mybatis对于这种大于小于等等还有另一种形式。

例如:<if test='id != null and id gt 28'></if>

对应关系:

---------------------------------------

    gt            对应             >

    gte         对应              >=

    lt             对应              <(会报错  相关联的 "test" 属性值不能包含 '<' 字符)

    lte          对应               <=(会报错  相关联的 "test" 属性值不能包含 '<' 字符)

---------------------------------------

2 如果为字符串类型

2.1 如果不需要过滤空串的情况 仅仅判断null即可

例如:<if test="username != null"></if>

2.2 如果需要过滤空串,添加空串判断即可  不支持 &&   所以这里用 and  or  || 来做逻辑与或的判断 

例如:<if test="username != null and '' != username"></if> 或者 <if test="username != null and ''  neq username"></if>

2.3 如果判断字符串是否已某个特殊字符开头,结尾等。直接调用String的对应方法即可

例如:<if test="username != null and username.indexOf('ji') == 0"> </if> <!-- 是否以什么开头 -->
    <if test="username != null and username.indexOf('ji') >= 0"> </if> <!-- 是否包含某字符 -->
    <if test="username != null and username.lastIndexOf('ji') > 0"></if>  <!-- 是否以什么结尾 -->

2.4 是否是某个特定字符串,某些业务有此需要。

例如:<if test="username != null and 'hello' == username"></if> 或者<if test="username != null and 'hello' eq username"></if>

注意:

<if test="username != null and 'hello' == username"></if>这种形式的写法在参数类型是字符串的时候是没有问题的,

但是参数类型为非字符串类型的时候就需要写成 <if test="username != null and 'hello'.toString() == username.toString()"></if>

仅仅写成<if test="username != null and 'hello'.toString() == username"></if>也会有很大可能会挂。

也许你会说非字符串的为什么要写成这样。这就要看特殊需要了。

例如:某一个sql片段是公用的,

<if test="username != null"></if>
<if test="password != null"></if>

该片段更新条件也用,但是当你需要将某一个字段更新成null的时候怎么办。

这个时候就可以通过传入一个特定的字符串来弄。当传入的字符串为特定字符串的时候就更新该字符串为null。

<if test="username != null and 'hello'.toString() == username.toString()">xxx=null</if>

当然这样子貌似date型会挂。

通过 2.2 也可以看出mybatis对于字符串的相等不相等的判断也是有对应的特殊操作符的。

-------------------------------------------------------

eq                  对应                ==

neq               对应                 !=

------------------------------------------------------

当然还可以看出来if的条件判断test是支持对象自身方法调用的,即使是自己写的方法,可以自己尝试。当然下面会有例子。

例如:里面可以用‘xxxx’.equals(xxxx) 字符串的比较两个字符串方法

    xxxx.indexOf('ss') 判断字符串里面是否包含某个字符等等  

 3 判断list是否为空

上面说过,if条件判断可以直接调用对象自身的方法进行逻辑判断,所以list判空。可以调用.size()>0或者.isEmpty()

例如:<if test="userList != null and userList.isEmpty()"></if> , <if test="userList != null and userList.size()>0"></if>

4 map参数同同理  取值的话 map.key(map中的key名字)即可


原文来自: 
https://www.cnblogs.com/sumlen/p/11130554.html

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MyBatis是一个流行的ORM框架,通过Mapper文件将Java对象映射到SQL语句。MyBatis的Mapper文件是一个XML文件,它包含了可以执行的SQL语句。动态SQLMyBatis的一个重要的功能,可以根据不同情况,生成不同的SQL语句,从而实现更加灵活的查询。 if标签MyBatis动态SQL的一种标签,它可以根据条件生成动态SQL语句。if标签的语法如下: ``` <if test="condition1"> SQL语句 </if> ``` 其中,test属性表示需要判断的条件,可以是一个字符串表达式或者OGNL表达式。SQL语句则是当满足条件时需要执行的SQL语句。如果条件不满足,则不会执行这段SQL语句。 if标签可以包含多个嵌套的if标签,以实现更加复杂的条件判断。同时,还可以使用choose、when、otherwise标签结合if标签,实现更加灵活的条件判断。例如: ``` <select id="queryUsers" resultType="User"> SELECT * FROM users <where> <if test="username != null and username != ''"> AND username LIKE '%${username}%' </if> <if test="gender != null and gender != ''"> AND gender = #{gender} </if> <choose> <when test="orderBy == 'name'"> ORDER BY username </when> <when test="orderBy == 'age'"> ORDER BY age </when> <otherwise> ORDER BY id </otherwise> </choose> </where> </select> ``` 以上例子是一个查询用户的SQL语句,根据不同情况生成不同的SQL语句。其中,if标签根据传入的参数判断是否需要加入username、gender的查询条件,choose标签根据orderBy的值,生成不同的排序条件。 if标签MyBatis动态SQL的重要功能之一,可以根据条件生成不同的SQL语句,从而实现更加灵活的查询。熟练掌握if标签的使用,可以使MyBatis开发更加高效和灵活。 ### 回答2: Mybatis是一款流行的Java ORM框架,它提供了许多方便的功能,其中之一就是动态SQL。当我们需要根据不同的条件拼接SQL语句时,就可以使用动态SQL来实现。具体来说,if标签是其中一种实现方式,下面将详解其用法。 if标签可以用于where、set、foreach等标签中,用于判断当前条件是否成立,如果成立就拼接相应的SQL语句,否则不进行任何操作。其基本语法如下: <if test="condition"> SQL语句 </if> 其中,test属性用于指定判断条件,可以是简单的表达式或者是复杂的逻辑语句。下面是一些常用的判断条件: 1. 判断参数是否为空 <if test="param != null"> SQL语句 </if> 2. 判断字符串是否为空 <if test="str != ''"> SQL语句 </if> 3. 判断是否相等 <if test="param == 'value'"> SQL语句 </if> 4. 判断是否大于 <if test="param > 10"> SQL语句 </if> 5. 判断是否包含 <if test="str.indexOf('value') != -1"> SQL语句 </if> 除了以上几种基本用法,if标签还可以嵌套使用,用于实现更复杂的判断逻辑。例如: <if test="param1 != null"> SQL语句 <if test="param2 != null"> SQL语句 </if> </if> 上述代码示例中,如果param1不为空,就会拼接第一个SQL语句;如果param2也不为空,则会在第一个SQL语句之后再拼接第二个SQL语句。 总的来说,if标签Mybatis动态SQL的基础,能够帮助我们实现更加灵活的SQL拼接,提高代码的可读性和可维护性。学习和掌握其使用方法,对于开发高效、高质量的程序是非常有帮助的。 ### 回答3: MyBatis是一款非常优秀的Java持久层框架,提供了丰富的SQL查询方式。在进行SQL查询的时候,经常需要根据具体的条件组合而成不同的SQL语句。这个时候可以使用MyBatis动态SQL特性。在动态SQL中,if标签是常用的一种方式。下面就来详解一下if标签用法。 if标签的作用:在SQL语句中根据判断条件动态生成SQL语句。相当于Java中的if语句。 if标签用法:在Mapper.xml文件中,使用if标签包裹需要动态生成的SQL。if标签的属性为test,表示判断条件。属性值可以是任何符合OGNL规则的表达式,常见的有以下几种方式: 1. 如果条件不为空,则生成相应的SQL语句:<![CDATA[需要动态生成的SQL语句]]>。 例如: <select id="findUser" parameterType="User" resultMap="UserMap"> SELECT * FROM user <where> <if test="name != null and name != ''"> AND name = #{name} </if> </where> </select> 当调用findUser方法时,如果传入的name不为空,那么就会生成如下的SQL语句: SELECT * FROM user WHERE name = ? 2. 如果条件为true,则生成相应的SQL语句: 例如: <select id="findUsers" resultMap="UserMap"> SELECT * FROM user <where> <if test="name != null and name != ''"> AND name = #{name} </if> <if test="age != null"> AND age = #{age} </if> </where> </select> 当调用findUsers方法时,如果传入的name和age分别为"Tom"和20,那么就会生成如下的SQL语句: SELECT * FROM user WHERE name = 'Tom' AND age = 20 3. 如果条件为false,则不在生成相应的SQL语句: 例如: <select id="findUsers" resultMap="UserMap"> SELECT * FROM user <where> <if test="name != null and name != ''"> AND name = #{name} </if> <if test="age != null"> AND age = #{age} </if> </where> </select> 当调用findUsers方法时,如果传入的name为"Tom",age为空,那么就会生成如下的SQL语句: SELECT * FROM user WHERE name = 'Tom' if标签的嵌套: if标签可以进行嵌套,从而实现更加灵活的SQL生成方式。 例如: <select id="findUsers" resultMap="UserMap"> SELECT * FROM user <where> <if test="name != null and name != ''"> AND name = #{name} </if> <if test="age != null"> <if test="age < 18"> AND age < 18 </if> <if test="age >= 18 and age < 30"> AND age >= 18 AND age < 30 </if> <if test="age >= 30"> AND age >= 30 </if> </if> </where> </select> 当调用findUsers方法时,如果传入的name为空,age为25,那么就会生成如下的SQL语句: SELECT * FROM user WHERE age >= 18 AND age < 30 以上就是if标签用法详解。使用if标签可以让查询条件更加灵活、动态,深受开发者们的喜爱。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值