MyBatis是一个基于java的持久层框架,支持普通SQL查询,存储过程及高级映射。它避免了几乎所有的JDBC代码和参数的手工设置以及对结果集的封装。并且可以使用简单的XML或注解来配置和映射原生信息。
MyBatis最强大的功能之一就是动态SQL语句功能,传统JDBC的方法在进行组合复杂的SQL语句的时候,需要去拼接,难免会出现一不留神少了个空格、逗号导致程序错误。MyBatis的动态SQL功能正好解决了这个问题,通过在XML文件里配置,可以非常灵活的组合SQL语句,提高开发效率。
1.if标签
if标签可以用在很多类型的SQL语句中,下面先看一个很简单的例子。
<select id="UserAll"resultType="user">
select * from user username=#{username}
</select>
如果我们传入的值是null,这条语句就很可能报错或者查询结果为空。因此我们需要加入if标签先进行判断,如果值为null或者空字符串时,不会将此条件加入查询语句中,增加了灵活性。
<select id="UserAll"resultType="user">
select * from user where
<if test=" username!= null and username!= '' ">
username = #{username}
</if>
</select>
2.if+set更新语句
当update语句中没有使用if标签时,如果有一个参数为null,都会导致修改之后这个参数为空或报错。
当在update语句中使用if标签时,如果前面的if没有执行,则或导致逗号多余错误。使用set标签可以将动态的配置SET标签,去除追加到条件末尾的任何不相关的逗号。
使用if+set标签执行修改后,如果某个字段为null则不会更新这个字段。
<update id="updateUser"parameterType="com.lzyim.entity.User">
update user
<set>
<if test="name != null">username = #{ username},</if>
<if test="password != null">password =#{password},</if>
</set>
where id = #{id}
</update>