MyBatis的强大特性之一 便是动态SQL。由于JDBC或类似框架需要根据不同条件拼接SQL语句时不仅不能忘了必要的空格,还要注意省略掉列名列表最后的的逗号,处理方式比较麻烦,而动态SQL可以摆脱这些问题。这里主要介绍计中MyBatis的动态SQL在XML文件中支持的几种标签。
if标签
if标签通常用于where语句,通过判断参数值来决定是否使用某个查询条件,也常用于update语句中判断是否更新某一个字段,还可以在insert语句中用来判断是否插入某个字段的值。
示例:
需求:以订单表orders为例(id,user_id,number,createtime,note)
通过的用户ID和订单编号查询订单?
select * from orders where number=? and user_id=?
按照之前的方式进行查询如下:
<!--通过订单号或用户名查询订单-->
<select id="getOrderByIdAndNum" resultType="MavenLG.bean.Orders" >
select * from orders where user_id = #{userId} and number = #{number}
</select>
当同时输入user_id和number这两个参数时,能查出正确的结果,但当只提供user_id一个参数,另一个参数number默认为null,就会导致number=null也成为查询条件,无法查找正确结果。此时可以采用if标签解决问题:
<!--通过订单号或用户名查询订单-->
<select id="getOrderByIdAndNum" resultType="MavenLG.bean.Orders" >
select * from orders where 1=1
<if test="userId != null and userId != ''">
and user_id = #{userId}
</if>
<if t