动态 SQL 是 MyBatis 强大的特性之一,利用提供的动态 SQL 标签,可以很灵活地对 SQL 进行二次表述,这些标签的用法很像是在 HTML 文本中插入 JSP 标签的用法;

以下是 MyBatis 3.X 支持的几组标签:

if 用法


if 标签用于条件判断,用法很类似于 JSP 的 if 标签,以下是在一个实体映射配置文件中的使用示例:

<!--使用id,name,createDate 属性合查找 User-->
<select id="getUser" resultMap="userMap">
     select user_id,user_name,user_password,create_date from users
     where 1 = 1
     <if test="id != null">
         and user_id = #{id}
     </if>
     <if test="name != null and name != ''">
         and user_name = #{name}
        </if>
     <if test="createDate != null">
         and create_date = #{createDate, jdbcType=DATE}
     </if>
</select>

<!--使用 name,password 属性组合更新 User-->
<update id="updateUserById">
    update users
    set
    <if test="name != null and name != ''">
        user_name = #{name},
    </if>
    <if test="password != null and name!= ''">
        user_password = #{password}
    </if>
    where user_id = #{id}
</update>

以上配置对应的2个接口方法签名如下:

User getUser(User user);
int updateUserById(User user);

示例来说 getUser 方法可以匹配以下的 User 属性入参并转换为相应的具体 SQL :