六、动态SQL拼接
MyBatis提供了if 、foreach、choose等标签动态拼接sql语句,下面介绍这些标签的使用
1、if标签
if标签通常用于WHERE语句中,通过判断参数值决定是否使用某个查询条件。
<select id="selectStudentListLikeName"
parameterType="org.weiz.example01.Student"
resultMap="BaseResultMap">
select * from student
<if test="name!=null and name!='' ">
where name like CONCAT(CONCAT('%',#{name}),'%')
</if>
</select>
上面示例中,使用if标签进行判断,如果传入的参数值为null或空字符串,就不进行条件判断。
2、foreach标签
此标签主要用于构建in条件,可以在sql标签中对集合进行迭代,通常可以将其用到批量删除、添加等操作中,使用方法如下:
<delete id="deleteBatch">
delete from student where id in
<foreach collection="array" item="id" index="index' open="(" close=")" separator=",">
#{id}
</foreach>
</delete>
在上面的示例中,通过foreach标签将传入的id数组拼接成in(1,2,3),实现批量删除的功能。
foreach标签包含如下几个属性:
• collection:有3个值,分别是list、array和map,分别对应Java中的类型为:List集合、Array和Map三种数据类型。示例中传的参数为数组,所以值为array。
• item:表示在迭代过程中每一个元素的别名。
• index:表示在迭代过程中每次迭代到的位置(下标)。
• open:前缀。
• close:后缀。
• separator:分隔符,表示迭代时每个元素之间以什么分隔