21、MyBatis动态<if>标签的使用详解

发布时间 2023-06-29 00:57:59作者: 爱文(Iven)

一、符号转义详解:

1、转义字符方式:

含义原符号转义字符
小于 < &lt;
小于等于 <= &lt;=
大于 > &gt;
大于等于 >= &gt;=
逻辑与(和) & &amp;
单引号 &apos;
双引号 &quot;
# 查询创建时间是小于2023年的用户
SELECT * FROM user where create_at &lt '2023'

 

2、XML语法方式:

含义

原符号

转义字符

小于

<

<![CDATA[ < ]]>

小于等于

<=

<![CDATA[ <= ]]>

大于

>

<![CDATA[ > ]]>

大于等于

>=

<![CDATA[ >= ]]>

逻辑与(和)

&

<![CDATA[ & ]]>

单引号

<![CDATA[ ’ ]]>

双引号

<![CDATA[ " ]]>

# 查询创建时间是小于2023年的用户
SELECT * FROM user where create_at <![CDATA[ < ]]> '2023'

 

二、动态<if>标签使用详解:

1、if标签判断不为空:

    <select id="selectAllDemo" resultMap="BaseResultMap" parameterType="java.lang.String">
        select
        <include refid="Base_Column_List"/>
        from page_demo
        where delete = 0
        <if test="id neq null and id != ''">
            AND uuid = #{id}
        </if>
    </select>

 

2、if标签判断String类型:

    <select id="selectAllDemo" resultMap="BaseResultMap" parameterType="java.lang.String">
        select
        <include refid="Base_Column_List"/>
        from page_demo
        where delete = 0
        <if test="name == 'one'.toString()">
            AND nums &gt; 10
        </if>
    </select>

 

3、if标签判断Integer类型:

MyBatis规定,MyBatis在进行判断时,会将Integer=0的参数默认为‘’(空串),允许数字与字符串做比较

方式一:

    <select id="selectAllDemo" resultMap="BaseResultMap" parameterType="java.lang.String">
        select
        <include refid="Base_Column_List"/>
        from page_demo
        where delete = 0
        <if test="nums != null">
            AND nums = #{nums }
        </if>
    </select>

方式二:

    <select id="selectAllDemo" resultMap="BaseResultMap" parameterType="java.lang.String">
        select
        <include refid="Base_Column_List"/>
        from page_demo
        where delete = 0
        <if test="nums > '0'.toString()">
            AND nums &gt; #{nums }
        </if>
    </select>

 

4、if标签判断Boolean类型:

方式一:

    <select id="selectAllDemo" resultMap="BaseResultMap" parameterType="java.lang.String">
        select
        <include refid="Base_Column_List"/>
        from page_demo
        where delete = 0
        <if test="isReport">
            AND is_report = 1
        </if>
    </select>

方式二:

    <select id="selectAllDemo" resultMap="BaseResultMap" parameterType="java.lang.String">
        select
        <include refid="Base_Column_List"/>
        from page_demo
        where delete = 0
        <if test="isReport != null and 'true'.toString() == isReport .toString()">
            AND is_report = #{isReport}
        </if>
    </select>