SQL标签
- foreach
- where
- set
- if
- choose when otherwise
- trim
- bind
foreach标签
属性:
- collection:当输入参数为List类型时,其值为list;当参数为数组时,其值为array
- item:集合里每一项的名称
- separator:每一项之间的分隔符
- open:执行循环体之前拼接的字符
- close: 执行循环体之后拼接的字符
<!-- 批量插入 -->
<insert id="insertUser" parameterType="java.util.List">
insert into user (username,birthday,sex,address) values
<foreach collection="list" item="item" separator=",">
(#{item.username},#{item.birthday},#{item.sex},#{item.address})
</foreach>
</insert>
<!-- 批量查询 -->
<select id="selectMuiltUser" parameterType="java.util.Arrays" resultType="user">
select * from user where id in
<foreach collection="array" item="item" separator="," open="(" close=")">
#{item}
</foreach>
</select>
其中输入参数parameterType可以省略
where标签
where标签一般和if标签连用,一般情况if标签不会单独使用
where标签在条件成立的情况下会自动拼接where关键字,如果多个条件成立,会自动去掉where后面的第一个and
<!--根据姓名或者性别查询-->
<select id="selectByUsernameOrSex" resultType="user" parameterType="map">
select * from user
<where>
<if test="username!=null and username!=''">
and username=#{username}
</if>
<if test="sex!=null and sex!=''">
and sex=#{sex}
</if>
</where>
</select>
set标签
set标签一般也和if标签连用
set标签会自动拼接set关键字,会自动去掉最后条件里面的一个逗号
<update id="updateUser" parameterType="user">
update user
<set>
<if test="username!=null and username!=''">
username=#{username},
</if>
<if test="sex!=null and sex!=''">
sex=#{sex},
</if>
</set>
where id=#{id}
</update>
choose when otherwise标签
只有一个when或otherwise条件会执行,类似逻辑判断中的if(){}else if(){}else{}
<select id="getByNameOrSexbak" parameterType="map" resultType="user">
select * from user where
<choose>
<when test="uname!=null and uname!=''">
username like '%${uname}%'
</when>
<when test="usex!=null and usex!=''">
sex=#{usex}
</when>
<otherwise>
1=1
</otherwise>
</choose>
</select>
trim标签
trim标签用来格式化SQL语句
属性:
- prefix:前缀
- suffix:后缀
- prefixOverrides:忽略前缀
- suffixOverrides:忽略后缀
<update id="updUserbak" parameterType="user">
<trim prefix="update user set" suffix="where id=#{id}" suffixOverrides=",">
<if test="username!=null and username!=''">
username=#{username},
</if>
<if test="sex!=null and sex!=''">
sex=#{sex},
</if>
</trim>
</update>
bind标签
bind:中文解释是捆绑的意思,所以它的作用是拼接字符串,在输入参数前或后拼接
属性:
- name:新的字符串名称
- value:新的字符串的值,获取通过_parameter得到
<select id="selectByName" parameterType="user" resultType="User">
<bind name="uname" value="'%'+_parameter.getUsername()+'%'"/>
select * from user where username like #{uname}
</select>