- if
- choose(when, otherwise)
- trim(where, set)
- foreach
1. if| 查询员工,那个携带了字段查询条件就带上这个字段的值
<!-- public Lsit<Employee> getEmpsByConditionIf(Employee employee); -->
<select id="getEmpsByConditionIf" resultType="">
select * from tab_employee
where
<!-- test,判断表达式(OGNL)
c:if test
从参数中取值进行判断
-->
<if test="id!=null">
id = #{id}
</if>
<if test="last_name!=null and last_name.trim()=''">
and last_name like #{lastName}
</if>
<!--ognl会进行字符串与数字的转换判断 "0"==0-->
<if test="gender==0 or gender==1">
and gender=#{gender}
</if>
当id == null 时, sql 拼接会变成, where and … 。 会报错
第一种解决办法, 在后面加上1=1, where 1=1 and …
第二种使用where标签来包扩所有的查询条件, mybatis就会将where标签中拼装的sql, 多出来的and或or去掉 //where自会去掉第一个多出来的and或者or
2. where
<!-- public Lsit<Employee> getEmpsByConditionIf(Employee employee); -->
<select id="getEmpsByConditionIf" resultType="">
select * from tab_employee
<where>
<!-- test,判断表达式(OGNL)
c:if test
从参数中取值进行判断
-->
<if test="id!=null">
id = #{id}
</if>
<if test="last_name!=null and last_name.trim()=''">
and last_name like #{lastName}
</if>
<!--ognl会进行字符串与数字的转换判断 "0"==0-->
<if test="gender==0 or gender==1">
and gender=#{gender}
</if>
</where>