2017 06 15
本次笔记所记录:
mappe映射文件内的
· <trim>标签
· <where>标签
· <set> 标签
UPDATE更新操作SET标签
批量增加和批量删除
<where>标签的使用
<!--Element : whereContent Model : (include | trim | where | set | foreach | choose | if | bind)*-->
<!-- where标签的规则:
1.发现标签内有内容,会在内容最前面添加 whehe 关键字
2.当发现标签内有内容的时候会检查内容是否含有 AND空格 或者 OR空格 如果有 就抹掉 -->
<sql id="sys_user_columns">
user_id,account,password,user_name
</sql>
<select id="if02" parameterType="map" resultMap="BaseResultMapper">
SELECT
<include refid="sys_user_columns" />
FROM
user
<where>
<!-- test中写的类中的属性或者Map中的KEY -->
<if test="user_name !=null && user_name != ''">
AND user_name like CONCAT('%',#{user_name},'%')
</if>
<if test="account != null and account != ''">
AND account like CONCAT('%',#{account},'%')
</if>
</where>
</select>
<set>标签的使用
<set>标签用于开发可以减少sql语句中 set关键字的运用错误
如果传递过来的值只有一个,
并且在mapper文件中运用<if>标签做了处理 那么极有可能因为一个逗号 "," 导致语句出错
因此 介绍<set>标签 避免错误发生
sql语句set关键字 代码示例:
<update id="update01" parameterType="User">
UPDATE
user
SET
<if test="account !=null and account !='' ">
account = #{account},
</if>
<if test="userName !=null and userName !='' ">
user_name = #{userName},
</if>
<if test="pwd !=null and pwd !='' ">
password = #{pwd},
</if>
WHERE
user_Id = #{userId}
</update>
<set>标签 代码示例:
<update id="update01" parameterType="User">
UPDATE
user
<set>
<if test="account !=null and account !='' ">
account = #{account},
</if>
<if test="userName !=null and userName !='' ">
user_name = #{userName},
</if>
<if test="pwd !=null and pwd !='' ">
password = #{pwd},
</if>
</set>
WHERE
user_Id = #{userId}
</update>
<trim>标签的使用
<trim prefix="" prefixOverrides="" suffix="" suffixOverrides="">
<!-- trim标签属性解释: -->
<!--prefix前缀-->
<!--prefixOverrides前缀抹掉-->
<!--suffix后缀-->
<!--suffixOverrides后缀抹掉-->
</trim>
<!-- <where>标签可以用<trim>标签来实现
检测前缀where
当发现包含 AND 或 OR 关键字 即抹掉 (不区分大小写)
<set>标签也可以用<trim>标签来实现
-->
<trim> 标签简单示例
同样也是<trim>标签实现<where>标签简单示例:
<select id="if03" parameterType="map" resultMap="BaseResultMapper">
SELECT
<include refid="sys_user_columns" />
FROM
user
<!-- test中写的类中的属性或者Map中的KEY -->
<trim prefix="WHERE" prefixOverrides="AND |OR ">
<if test="user_name !=null && user_name != ''">
AND user_name like CONCAT('%',#{user_name},'%')
</if>
<if test="account != null and account != ''">
AND account like CONCAT('%',#{account},'%')
</if>
</trim>
</select>
<trim>标签实现<set>标签简单示例:
<select id="if03" parameterType="map" resultMap="BaseResultMapper">
SELECT
<include refid="sys_user_columns" />
FROM
user
<!-- test中写的类中的属性或者Map中的KEY -->
<trim prefix="WHERE" prefixOverrides="AND |OR ">
<if test="user_name !=null && user_name != ''">
AND user_name like CONCAT('%',#{user_name},'%')
</if>
<if test="account != null and account != ''">
AND account like CONCAT('%',#{account},'%')
</if>
</trim>
</select>