您的位置:

Mybatiselse标签详解

一、Mybatis标签有哪些

Mybatis是一种优秀的持久层框架,它主要是对JDBC进行封装,Mybatis的标签可以说是它灵活性的主要体现。Mybatis的标签主要分为两类:CRUD标签和SQL标签。其中,CRUD标签用于增删改查操作,SQL标签用于自定义SQL。下面是Mybatis中主要的标签:

<select></select>
<insert></insert>
<update></update>
<delete></delete>
<if></if>
<choose></choose>
<when></when>
<otherwise></otherwise>
<where></where>
<set></set>
<foreach></foreach>
<bind></bind>
<trim></trim>
<if></if>
<otherwise></otherwise>

二、Mybatis的if标签使用

Mybatis的if标签主要是用于在SQL语句中添加条件判断,用于动态拼接SQL语句。它的使用方法如下:

<select id="findUsers" parameterType="java.util.Map" resultType="User">
    select * from user
    where 1=1
    <if test="username != null">and username like '%${username}%'

上面的代码中,我们通过if标签实现了动态的SQL语句拼接,如果username和email存在,则会将它们作为查询条件动态添加到SQL语句中,如果不存在,则不会添加。

三、Mybatis标签大全

除了if标签之外,Mybatis还提供了很多其他的标签,它们各自的作用也不同,下面是Mybatis标签大全:

  • <insert>:插入数据
  • <update>:更新数据
  • <delete>:删除数据
  • <select>:查询数据
  • <if>:动态添加SQL语句(上面已经介绍过了)
  • <choose></choose>:当多个if的test条件都为false时,才会执行,相当于Java中的switch-case语句
  • <when></when>:choose标签下面的if条件,可以有多个when标签
  • <otherwise>:choose标签下面所有的if的条件都为false时,就会执行otherwise里面的代码
  • <where></where>:在SQL语句中动态添加WHERE关键字(类似于if标签)
  • <set></set>:在SQL语句中动态添加SET关键字
  • <foreach></foreach>:可以遍历一个集合,并在SQL语句中从这个集合中取值
  • <bind></bind>:给OGNL表达式取别名
  • <trim></trim>:可以去除SQL语句中的一些不必要的空格或者逗号,类似于Java中的trim()方法

四、Mybatisif标签

除了Mybatis提供的标签之外,我们还可以结合Java的语法,通过if语句来动态拼接SQL语句。

<select id="findUsers" parameterType="java.util.Map" resultType="User">
    select * from user
    where 1=1
    <if test="username != null">and username like '%${username}%'

在上面的代码中,我们结合了Java的if语句来动态拼接SQL语句,如果age不为null,则会加入age的等值判断,否则不会加入。

五、Mybatistrim标签

Mybatistrim标签的作用是去除SQL语句中不必要的空格或者逗号。

<select id="findUsers" parameterType="java.util.Map" resultType="User">
    select * from user
    <trim prefix="where" prefixOverrides="and |or">
        <if test="username != null">
            and username like '%${username}%'
        </if>
        <if test="email != null">
            and email like '%${email}%'
        </if>
    </trim>
</select>

上面的代码中,我们用了<trim prefix="where" prefixOverrides="and |or"></trim>去掉了SQL语句中多余的and或者or关键字。如果username和email存在,则会将它们作为查询条件动态添加到SQL语句中,如果不存在,则不会添加。同时,<trim prefix="where"></trim>中的prefix属性表示在SQL语句中添加WHERE关键字。

六、Mybatis标签

Mybatis标签可以说是Mybatis的精华所在,通过灵活使用标签,可以让我们轻松地编写出动态的SQL语句。下面我们再回顾一下Mybatis中主要使用的标签:

  • <if>
  • <choose></choose>
  • <when></when>
  • <otherwise>
  • <where></where>
  • <set></set>
  • <foreach></foreach>
  • <bind></bind>
  • <trim></trim>
  • <if></if>
  • <otherwise></otherwise>

七、Mybatis的else标签使用

通过前面的介绍,我们已经知道了Mybatis中常用的标签,现在可以说是轻松理解Mybatiselse标签的作用。Mybatiselse标签主要是在if标签中使用,用于对if条件的反转,效果相当于Java中的else分支,下面的代码展示了如何使用Mybatiselse标签:

<select id="findUsers" parameterType="java.util.Map" resultType="User">
    select * from user
    <if test="age != null">
        <if test="age < 20">
            and age < 20
        </if>
        <if test="age >= 20 and age < 30">
            and age >= 20 and age < 30
        </if>
        <if test="age >= 30">
            and age >= 30
        </if>
    <else>
        select * from user
    </if>
</select>

在上面的代码中,我们使用了<else></else>标签来实现if条件的反转,如果age不为null,则会按照不同的年龄区间来动态的拼接SQL语句;如果age为null,则会查询全部用户信息。