if 标签可通过 test 属性的表达式进行判断,若表达式的结果为 true ,则标签中的内容会执行;反之标签中 的内容不会执行
<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 和 if 一 般结合使用:a> 若 where 标签中的 if 条件都不满足,则 where 标签没有任何功能,即不会添加 where 关键字b> 若 where 标签中的 if 条件满足,则 where 标签会自动添加 where 关键字,并将条件最前方多余的and 去掉注意: where 标签不能去掉条件最后多余的 and
<select id="getEmpListByMoreTJ2" resultType="Emp">
select * from t_emp
<where>
<if test="ename != '' and ename != null">ename = #{ename}</if>
<if test="age != '' and age != null">and age = #{age}</if>
<if test="sex != '' and sex != null">and sex = #{sex}</if>
</where>
</select>
trim 用于去掉或添加标签中的内容常用属性:prefix :在 trim 标签中的内容的前面添加某些内容prefixOverrides :在 trim 标签中的内容的前面去掉某些内容suffix :在 trim 标签中的内容的后面添加某些内容suffixOverrides :在 trim 标签中的内容的后面去掉某些内容
<select id="getEmpListByMoreTJ" resultType="Emp">
select * from t_emp
<trim prefix="where" suffixOverrides="and">
<if test="ename != '' and ename != null">ename = #{ename} and</if>
<if test="age != '' and age != null">age = #{age} and</if>
<if test="sex != '' and sex != null">sex = #{sex}</if>
</trim>
</select>
choose 、 when 、 otherwise 相当于 if...else if..else
<select id="getEmpListByChoose" resultType="Emp">select <include refid="empColumns"></include> from t_emp
<where>
<choose>
<when test="ename != '' and ename != null">ename = #{ename}</when>
<when test="age != '' and age != null">age = #{age}</when>
<when test="sex != '' and sex != null">sex = #{sex}</when>
<when test="email != '' and email != null">email = #{email}</when>
</choose>
</where>
</select>
属性:collection :设置要循环的数组或集合item :表示集合或数组中的每 一 个数据separator :设置循环体之间的分隔符open :设置 foreach 标签中的内容的开始符close :设置 foreach 标签中的内容的结束符
<insert id="insertMoreEmp">insert into t_emp values <foreach collection="emps" item="emp" separator=",">
(null,#{emp.ename},#{emp.age},#{emp.sex},#{emp.email},null)
</foreach>
</insert> <!--int deleteMoreByArray(int[] eids);-->
<delete id="deleteMoreByArray">delete from t_emp where
<foreach collection="eids" item="eid" separator="or">eid = #{eid}</foreach>
</delete> <!--int deleteMoreByArray(int[] eids);-->
<delete id="deleteMoreByArray">delete from t_emp where eid in <foreach collection="eids" item="eid" separator=","
open="(" close=")">#{eid}
</foreach>
</delete>
sql 片段,可以记录一 段公共 sql 片段,在使用的地方通过 include 标签进行引入
<sql id="empColumns"> eid ,ename,age,sex,did </sql> select <include refid="empColumns"></include> from t_emp
int 类型判断的时候 判断是否为0 Integer 判断的时候判断是否为null 否则动态Sql不生效