14、MyBatis动态标签的使用详解

一、符号转义详解:

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>

 

三、动态<foreach>标签使用详解:

1、foreach标签循环String类型:

  <select id="selectAllDemo" resultMap="BaseResultMap" parameterType="java.lang.String">
    select
    <include refid="Base_Column_List"/>
    from page_demo
    where delete = 0
    <if test="names != null and names != ''">
      AND (
      <foreach collection="names.split(',')" item="item" separator=" OR ">
        name LIKE CONCAT('%', #{item}, '%')
      </foreach>)
    </if>
    <if test="ids != null and ids != ''">
      AND  id IN
      <foreach collection="ids.split(',')" item="item" index="index" open="(" separator=","
               close=")">
        #{item}
      </foreach>
    </if>
  </select>

 

2、foreach标签循环List类型:

  <select id="selectAllDemo" resultMap="BaseResultMap" >
    select
    <include refid="Base_Column_List"/>
    from page_demo
    where delete = 0
    <if test="idList != null">
      id IN
      <foreach collection="idList" item="id" index="index" open="(" separator="," close=")">
        #{id, jdbcType=CHAR}
      </foreach>
    </if>
  </select>

 

posted on 2023-06-29 00:49  爱文(Iven)  阅读(562)  评论(0编辑  收藏  举报

导航