一.动态SQL
1. 随着用户的输入或外部条件的变化而变化的SQL语句,我们称为动态SQL;
二. <if>
判断条件是否成立,如果条件为true,则拼接SQL
<select id="pageList" resultType="com.wyyzs.pojo.Emp">
select e.*, d.name deptName from emp e left join dept d on e.dept_id = d.id
<where>
<if test="name != null and name != ''">
and e.name like concat('%', #{name}, '%')
</if>
<if test="gender != null">
and e.gender = #{gender}
</if>
<if test="begin != null">
and e.entry_date >= #{begin}
</if>
<if test="end != null">
and e.entry_date < #{end}
</if>
</where>
order by e.update_time desc
</select>
三. <where>
根据条件查询,来生成where关键字,并会自动去除条件前面多余的and或or,
where标签只会智能的去除首个满足条件语句的前缀,所以建议在使用where标签时,每个语句都最好写上 and 前缀或者 or 前缀
<select id="pageList" resultType="com.wyyzs.pojo.Emp">
select e.*, d.name deptName from emp e left join dept d on e.dept_id = d.id
<where>
<if test="name != null and name != ''">
and e.name like concat('%', #{name}, '%')
</if>
<if test="gender != null">
and e.gender = #{gender}
</if>
<if test="begin != null">
and e.entry_date >= #{begin}
</if>
<if test="end != null">
and e.entry_date < #{end}
</if>
</where>
order by e.update_time desc
</select>
四. <foreach>
1.属性说明
(1) collection:集合名称
(2) item:集合遍历出来的元素/项
(3) separator:每一次遍历使用的分隔符
(4) open:遍历开始前拼接的片段,foreach 代码的开始符号,一般是 ”(“,和 close=“)” 合用。常用在 in(),values() 时。该参数可选
(5) close:遍历结束后拼接的片段,foreach 代码的关闭符号,一般是 ”)“,和 open=“(” 合用。常用在 in(),values()时。该参数可选。
(6) index:在 list 和数组中,index 是元素序号;在 map 中,index 是元素 key。该参数可选
<insert id="batchAddEmpExpr">
insert into emp_expr(emp_id, begin, end, company, job) values
<foreach collection="exprList" item="item" separator=",">
(#{item.empId}, #{item.begin}, #{item.end}, #{item.company}, #{item.job})
</foreach>
</insert>