动态 SQL 是 MyBatis 强大的特性之一,利用提供的动态 SQL 标签,可以很灵活地对 SQL 进行二次表述,这些标签的用法很像是在 HTML 文本中插入 JSP 标签的用法;
以下是 MyBatis 3.X 支持的几组标签:
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 :