if标签
if标签可通过test属性(即传递过来的数据)的表达式进行判断。
就是if成立,就拼接这段sql。
test里面用and和or表达逻辑
<!--List<Emp> getEmpByCondition(Emp emp);--><select id="getEmpByCondition" resultType="Emp">select * from t_emp where 1=1<if test="empName != null and empName !=''">and emp_name = #{empName}</if><if test="age != null and age !=''">and age = #{age}</if><if test="sex != null and sex !=''">and sex = #{sex}</if><if test="email != null and email !=''">and email = #{email}</if></select>
where标签
- where和if一般结合使用:
- 若where标签中的if条件都不满足,则where标签没有任何功能,即不会添加where关键字
若where标签中的if条件满足,则where标签会自动添加where关键字,并将条件最前方多余的and/or去掉 。不去掉最后面的and/or。所以and/or要写在最前面。
<!--List<Emp> getEmpByCondition(Emp emp);--><select id="getEmpByCondition" resultType="Emp">select * from t_emp<where><if test="empName != null and empName !=''">emp_name = #{empName}</if><if test="age != null and age !=''">and age = #{age}</if><if test="sex != null and sex !=''">and sex = #{sex}</if><if test="email != null and email !=''">and email = #{email}</if></where></select>
trim标签
trim用于去掉或添加标签中的内容
- 常用属性:
- prefix:在trim标签中的内容的前面添加某些内容
- suffix:在trim标签中的内容的后面添加某些内容
- prefixOverrides:在trim标签中的内容的前面去掉某些内容,可以用
|表示或 - suffixOverrides:在trim标签中的内容的后面去掉某些内容
- 用了trim标签,if里面条件片段,and/or写在前后都可以,升级版的where标签
若trim中的标签都不满足条件,则trim标签没有任何效果,也就是只剩下select * from t_emp
<!--List<Emp> getEmpByCondition(Emp emp);--><select id="getEmpByCondition" resultType="Emp">select * from t_emp<trim prefix="where" suffixOverrides="and|or"><if test="empName != null and empName !=''">emp_name = #{empName} and</if><if test="age != null and age !=''">age = #{age} and</if><if test="sex != null and sex !=''">sex = #{sex} or</if><if test="email != null and email !=''">email = #{email}</if></trim></select>
choose、when、otherwise标签
类似
switch,case:break;,default
when至少要有一个,otherwise至多只有一个。
这里choose里面只能选择一个,所以不用加and/or关键字<!--List<Emp> getEmpByCondition(Emp emp);--><select id="getEmpByChoose" resultType="Emp">select * from t_emp<where><choose><when test="empName != null and empName != ''">emp_name = #{empName}</when><when test="age != null and age != ''">age = #{age}</when><when test="sex != null and sex != ''">sex = #{sex}</when><when test="email != null and email != ''">email = #{email}</when><otherwise>did = 1</otherwise></choose></where></select>
foreach标签
属性:
- collection:设置要循环的数组或集合
- item:表示集合或数组中的每一个数据
- separator:设置循环体之间的分隔符,分隔符前后默认有一个空格,如
, `` or - open:设置foreach标签中的内容的开始符
- close:设置foreach标签中的内容的结束符
<!--int deleteMoreByArray(@Param("eids") Integer[] eids);--><delete id="deleteMoreByArray">delete from t_emp where eid in<foreach collection="eids" item="eid" separator="," open="(" close=")">#{eid}</foreach></delete>
<!--int insertMoreByList(@Param("emps") List<Emp> emps);--><insert id="insertMoreByList">insert into t_emp values<foreach collection="emps" item="emp" separator=",">(null,#{emp.empName},#{emp.age},#{emp.sex},#{emp.email},null)</foreach></insert>
SQL片段
sql片段,可以记录一段公共sql片段,在使用的地方通过
include标签进行引入- 声明sql片段:
<sql>标签 ```xmleid,emp_name,age,sex,email
```
