if 标签可通过 test 属性的表达式进行判断,若表达式的结果为 true,则标签中的内容会执行;反之标签中的内容不会执行。
1 2 3 4 5 6 7 8 9 10 11 12 13
<!--List<Emp> getEmpListByCondition(Emp emp);--> <select id="getEmpListByMoreTJ" resultType="Emp"> select * from t_emp where 1=1 <if test="ename != '' and ename != null"> and ename = #{ename} </if> <if test="age != '' and age != null"> and age = #{age} </if> <if test="sex != '' and sex != null"> and sex = #{sex} </if> </select>
where
where 用于添加 where 关键字,一般和 if 结合使用。
若 where 标签中的 if 条件都不满足,不会添加 where 关键字。
若 where 标签中的 if 条件满足,则 where 标签会自动添加 where 关键字,并将条件最前方多余的 and 去掉(但是不会去掉最后多余的 and)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
<selectid="getEmpListByMoreTJ2"resultType="Emp"> select * from t_emp <where> <iftest="ename != '' and ename != null"> ename = #{ename} </if> <iftest="age != '' and age != null"> and age = #{age} </if> <iftest="sex != '' and sex != null"> and sex = #{sex} </if> </where> </select>
trim
trim 用于去掉或添加标签中的内容,常用属性:
prefix:在 trim 标签中的内容的前面添加某些内容。
prefixOverrides:在 trim 标签中的内容的前面去掉某些内容。
suffix:在 trim 标签中的内容的后面添加某些内容。
suffixOverrides:在 trim 标签中的内容的后面去掉某些内容。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
<selectid="getEmpListByMoreTJ"resultType="Emp"> select * from t_emp <trimprefix="where"suffixOverrides="and"> <iftest="ename != '' and ename != null"> ename = #{ename} and </if> <iftest="age != '' and age != null"> age = #{age} and </if> <iftest="sex != '' and sex != null"> sex = #{sex} </if> </trim> </select>
<!--List<Emp> getEmpListByChoose(Emp emp);--> <selectid="getEmpListByChoose"resultType="Emp"> select <includerefid="empColumns"></include> from t_emp <where> <choose> <whentest="ename != '' and ename != null"> ename = #{ename} </when> <whentest="age != '' and age != null"> age = #{age} </when> <whentest="sex != '' and sex != null"> sex = #{sex} </when> <whentest="email != '' and email != null"> email = #{email} </when> </choose> </where> </select>
foreach
foreach 用于循环生成语句。
1 2 3 4 5 6 7
<!--int deleteMoreByArray(int[] eids);--> <deleteid="deleteMoreByArray"> delete from t_emp where eid in <foreachcollection="eids"item="eid"separator=","open="("close=")"> #{eid} </foreach> </delete>
sql、include
sql 可以记录一段公共 sql 片段,在使用的地方通过 include 标签进行引入。
1 2 3 4 5
<sqlid="empColumns"> eid,ename,age,sex,did </sql>
select <includerefid="empColumns"></include> from t_emp