<if test="boolean判断结果(条件)">
数据库语句
</if> 实例说明:
<!--
条件中的where 1=1 是为了防止where 与<if>标签中的AND直接拼接导致出现sql语法错误
-->
<select id="queryStudent" parameterType="Student" resultType="Student">
SELECT * FROM student WHERE 1==1
<!--
如果name有值即可执行下属<if>标签中的拼接
-->
<if test="name != null AND name != ''">
AND name LIKE concat('%',#{name,jdbcType=VARCHAR},'%')
</if>
<!--
如果score的值>0那么执行下述<if>标签中的内容
-->
<if test="score > 0">
AND score >= #{score,jdbcType=VARCHAR}
</if>
</select> 在上述实例说明中展示了两个例子,其中因为在xml文件中是禁止出现<符号的,那么在xml文件标签中的判断类符号通常使用实体符号去代替。
| 判断类符号 | 实体符号 |
|---|---|
| > | > |
| < | < |
| >= | >= |
| <= | <= |
2: where标签
在我们使用
<where> <if test="条件1"> SQL语句1 </if> <if test="条件2"> SQL语句2 </if> </where>
实例说明:
<select id="queryTest2" resultMap="Student" parameterType="Student">
select * from student
<where>
<if test="name != null AND name != ''"> name LIKE concat('%',#{name,jdbcType=VARCHAR},'%') </if>
<if test="score > 0"> score >= #{score,jdbcType=VARCHAR} </if>
</where>
</select> 3:foearch标签
使用
item:循环体中的具体对象,自定义的变量。
index:在list和数组中,index是元素的序号,在map中,index是元素的key,该参数为可选。
open:表示该语句以什么内容开始
close:表示该语句以什么内容结束
separator:表示循环体具体对象的分隔符,例如在in()中,separator=","会自动在元素中用","隔开,避免手动输入逗号导致SQL报错,该参数可选。
<foreach collection="集合类型" open="开始的字符" close="结束的字符" item="集合中需要遍历的成员" separator="分隔符">
#{item的值}
</foreach> 实例说明:
<!--
循环简单类型的List,直接获取
-->
<select id="querytest3" parameterType="Student" resultType="Student">
select * from student
<if test="list!= null amd list.size > 0 ">
where id in
<foreach collection="List" open="(" close=")" item="stuId" separator=",">
#{stuId}
</foreach>
</if>
</select>
<!--
循环整个对象List<Student>(引用类型),遍历获取对象下的id属性
-->
<select id="queryTest3" resultMap="Student" parameterType="Student">
select * from student
<if test="list != null and list.size >0">
where id in
<foreach collection="List" separator="," item="student" open="(" close=")">
#{student.id}
</foreach>
</if>
</select>4:sql标签
sql标签代表该内容是一段sql代码,可以是表名、字段、where等条件,可以在其他地方复用sql标签中的内容。
首先定义sql标签中的sql片段,之后在其他的位置上使用include标签引用该代码片段sql语句
<sql id="为该片段命名">sql语句</sql>
<!--
定义sql标签中的sql片段
-->
<sql id="queryTest4">
select * from student
</sql>
<select id="queryTest3" resultMap="Student" parameterType="Student">
<!--
使用include标签引用该代码片段
-->
<include refid="queryTest4" />
<if test="list != null and list.size >0">
where id in
<foreach collection="List" separator="," item="student" open="(" close=")">
#{student.id}
</foreach>
</if>
</select> 5:choose where otherwise 标签
三个标签一般一起使用,类似与Java中的switch、case、default语句,当只有其中的一个条件生效的时候只执行满足这个条件的
实例说明
<select id="queryTest4" resultMap="Student" parameterType="Student">
select * from student
<where>
<choose>
<when test="name != null and name!=''">
and `name`=#{name}
</when>
<when test="score != null and score > 0">
and score=#{score}
</when>
<otherwise>
and id=#{id}
</otherwise>
</choose>
</where>
</select> 6:set标签
set标签可以动态的配置SET关键字,并剔除其内部标签的末尾逗号。使用if+set标签进行修改后,再进行更新操作,通过
事列说明
<update id="queryTest5" parameterType="Student">
update student
<set>
<if test="name!=null and name !=''">
`name`=#{name},
</if>
<if test="score!= null and score > 0">
score=#{score},
</if>
</set>
where id=#{id}
</update> 7:trim标签
prefix:前缀
prefixOverrides:去掉第一个and或者or
suffix:后缀
suffixOverrides:去掉最后一个逗号
实例说明:
<select id="queryTest6" parameterType="Student">
select * from student
<trim prefix="where" suffix="order by age" prefixOverrides="and
or" suffixOverrides=",">
<if test="name!= null and name!= ''">
AND `name`=#{name}
</if>
<if test="score!= null and score > 0">
and score=#{score}
</if>
</trim>
</select>