1. <sql>标签
也叫<sql>片段,在使用sql片段时使用include标签通过sql片段的id进行引用,sql片段的id在当前空间是唯一的,sql片段中也可以写其他的内容,只要符合语法规范都是可以的。示例:
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, name, age, hobby, del_flag, create_time, update_time
</sql>
<select id="listAnimals" resultType="com.zhang.entity.Animal">
select
<include refid="Base_Column_List"></include>
from animal
</select>
(注:<include>可以是单标签的,效果是一样的,我这里使用了双标签~)
2.<where>标签
根据where其后是否有sql,判断拼接 where,满足条件就拼接,否则不拼接。示例:
<select id="getAnimalByName" resultType="com.zhang.entity.Animal">
select * from animal
<where>
<if test="name!=null and name!=''">
and name = #{name}
</if>
</where>
</select>
3.<choose> 标签
类似于Java中的switch分支。只进入一个满足when的条件,如果所有when都不满足,则进入otherwise。示例:
<select id="getAnimalsByNameOrHobby" resultType="com.zhang.entity.Animal">
select * from animal
<choose>
<when test="hobby!=null and hobby!='' and name!=null and name!=''">
hobby = #{hobby} and name = #{name}
</when>
<when test="hobby!=null and hobby!=''">
hobby = #{hobby}
</when>
<otherwise>
name = #{name}
</otherwise>
</choose>
</select>
4.<set>标签
与where有相似,其后如果存在条件,则拼接set。<set>标签会动态地在行首插入SET关键字,并且自动帮我们去掉多余的逗号,适用于update,示例:
<update id="update">
update animal
<set>
<if test="age!=null and age!=''">
age = #{age}
</if>
<if test="name!=null and name!=''">
name = #{name},
</if>
<if test="hobby!=null and hobby!=''">
hobby = #{hobby}
</if>
</set>
where id = #{id}
</update>
<update id="updateById" parameterType="com.zhang.entity.Animal">
update animal
<set>
<if test="name != null">
`name` = #{name,jdbcType=VARCHAR},
</if>
<if test="age != null">
`age` = #{age,jdbcType=VARCHAR},
</if>
<if test="hobby != null">
hobby = #{hobby,jdbcType=VARCHAR},
</if>
<if test="create_time != null">
create_time = #{create_time,jdbcType=TIMESTAMP},
</if>
<if test="update_time != null">
update_time = #{update_time,jdbcType=TIMESTAMP},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
5.<foreach>标签
用于遍历List、Map、Array , 属性如下:
- collection:指定需要遍历的元素
- item:遍历之后的每一项
- separator:定义foreach里面语句的分隔符
- index:map中代表key,数组中代表数组下标
<select id="listAnimals" resultType="com.zhang.entity.Animal">
SELECT * FROM animal
WHERE id in
<foreach collection="ids" item="id" index="index"
open="(" close=")" separator=",">
#{id}
</foreach>
</select>
6。<bind>标签,用来定义变量,示例:
mapper层:
List<Animal> getByName(@Param("animalName") String name);
xml映射层:
<select id="getByName" resultType="com.zhang.entity.Animal">
<!--animalName为传过来的参数-->
<!--根据动物名字进行模糊查询-->
<bind name="animalNameLike" value="'%'+ animalName +'%'"/>
select * from animal
<where>
<if test="animalName != null and animalName != ''">
and `name` like #{animalNameLike}
</if>
</where>
</select>