<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- mapper 为根元素节点, 一个namespace对应一个dao -->
<mapper namespace="com.lianjia.home.customer.dao.ServiceChangeRecordDao">
<!-- type:resultMap最终所映射的Java对象类型,可以使用别名.
id:对resultMap的唯一标识 -->
<resultMap id="serviceChangeRecordMap" type="com.lianjia.home.customer.domain.ServiceChangeRecord">
<!--
id表示查询结果集中唯一标识
column:查询出的列名
property:type所指定的POJO中的属性名
最终reslutMap对column和property做一个映射关系(对应关系)
-->
<id column="id" property="id" />
<!-- 对普通列的映射定义 -->
<result column="customer_id" property="customerId" /><!--数据库列名 -- 对象中的属性名-->
<result column="change_type" property="changeType" />
<result column="change_uc_id" property="changeUcId" />
<result column="change_reason" property="changeReason" />
<result column="change_desc" property="changeDesc" />
<result column="created_time" property="createdTime" />
</resultMap>
<sql id ="serviceChangeRecordColumn">
<!-- <sql>用来封装SQL语句 , <include>来调用--> <!-- -->
<trim suffix="" suffixOverrides=",">
<!--trim标记是一个格式化的标记,可以完成set或者是where标记的功能等-->
<if test="id != null">id,</if>
<if test="customerId != null">customer_id,</if>
<if test="changeType != null">change_type,</if>
<if test="changeUcId != null">change_uc_id,</if>
<if test="changeReason != null">change_reason,</if>
<if test="changeDesc != null">change_desc,</if>
<if test="createdTime != null">created_time,</if>
</trim>
</sql>
<sql id="serviceChangeRecordValue">
<trim suffix="" suffixOverrides=",">
<if test="id != null">#{id},</if>
<if test="customerId != null">#{customerId},</if>
<if test="changeType != null">#{changeType},</if>
<if test="changeUcId != null">#{changeUcId},</if>
<if test="changeReason != null">#{changeReason},</if>
<if test="changeDesc != null">#{changeDesc},</if>
<if test="createdTime != null">#{createdTime},</if>
</trim>
</sql>
<sql id="serviceChangeRecordBaseColumn">
<trim suffix="" suffixOverrides=",">
id,
customer_id,
change_type,
change_uc_id,
change_reason,
change_desc,
created_time,
</trim>
</sql>
<!-- 保存ServiceChangeRecord记录 ,keyProperty直接指明了主键是哪一个字段,useGeneratedKeys与keyProperty连用,上面指定了主键,这里就指定它自增。 -->
<insert id="insert" parameterType="com.lianjia.home.customer.domain.ServiceChangeRecord" useGeneratedKeys="true" keyProperty="id">
insert into service_change_record (<include refid="serviceChangeRecordColumn"/>)
<!--调用 id为serviceChangeRecordColumn的<sql>,类似于将其代码放入此处 -->
values (<include refid="serviceChangeRecordValue"/>)
</insert>
<!-- 保存ServiceChangeRecord记录 parameterType 传入参数。此处是一个list,存储了对象-->
<insert id="insertBatch" parameterType="java.util.Collection" >
insert into service_change_record ( <include refid="serviceChangeRecordBaseColumn"/> )
values
<foreach collection="list" item="item" separator=",">
<trim prefix="(" suffix=")" suffixOverrides=",">
#{item.id},
#{item.customerId},
#{item.changeType},
#{item.changeUcId},
#{item.changeReason},
#{item.changeDesc},
#{item.createdTime},
</trim>
</foreach>
</insert>
<!-- 更新ServiceChangeRecord记录 -->
<update id="update" parameterType="map">
update service_change_record
<set>
<if test="entity.customerId != null"> customer_id=#{entity.customerId} ,</if>
<if test="entity.changeType != null"> change_type=#{entity.changeType} ,</if>
<if test="entity.changeUcId != null"> change_uc_id=#{entity.changeUcId} ,</if>
<if test="entity.changeReason != null"> change_reason=#{entity.changeReason} ,</if>
<if test="entity.changeDesc != null"> change_desc=#{entity.changeDesc} ,</if>
<if test="entity.createdTime != null"> created_time=#{entity.createdTime} ,</if>
<if test="includes !=null ">
<!-- 使用foreach遍历传入ids
collection指定输入对象中集合属性
item每次遍历生成的对象名
open开始遍历时要拼接的串
close结束遍历时要拼接的串
separator遍历的两个对象中间需要拼接的串
-->
<foreach collection="includes" item="field" open="" close="" separator=",">
${field.tname} = #{entity.${field.name}}
</foreach>
</if>
</set>
where id = #{entity.id}
</update>
<!-- 根据id删除ServiceChangeRecord记录 -->
<delete id="deleteByPk" parameterType="java.lang.Long">
delete from service_change_record
where id = #{id}
</delete>
</mapper>
insert update delete select 的id 的设置要跟方法名称保持一致。