一、 insert元素
   其属性如下:
parameterType
keyColumn
keyProperty
useGeneratedKeys
statementType
flushCache
timeout ,默认为unset(依赖jdbc驱动器的设置),设置执行该操作的最大时限,超时将抛异常

二、一般的INSERT操作——返回值为插入的记录数目                
 
 mapper接口代码:
 
/**
 * 添加学生信息
 * @param student 学生实例
 * @return 成功操作的记录数目
 */
int add(EStudent student);
 
 mapper.xml:
 
<insert id="add" parameterType="EStudent">
  insert into TStudent(name, age) values(#{name}, #{age})
</insert


三、执行INSERT操作后获取记录主键

<insert id="add" parameterType="EStudent" useGeneratedKeys="true" keyProperty="id">
    insert into TStudent(name, age) values(#{name}, #{age})
</insert>



四、 selectKey子元素

  作用:在insert元素和update元素中插入查询语句。

  其属性如下:

keyProperty

resultType

order属性

statementType

注意:selectKey操作会将操作查询结果赋值到insert元素的parameterType的入参实例下对应的属性中。并提供给insert语句使用

五、批量插入                                 

  方式1:

<insert id="add" parameterType="EStudent">
    <foreach collection="list" item="item" index="index" separator=";">
        INSERT INTO TStudent(name,age) VALUES(#{item.name}, #{item.age})
    </foreach>
</insert>



不过上述方式相当语句逐条INSERT语句执行,将出现如下问题:


1. mapper接口的add方法返回值将是最一条INSERT语句的操作成功与否(即0或1),而不是所有INSERT语句的操作成功的总记录数目


2. 当其中一条不成功时,不会进行整体回滚


解决上述问题可以利用下面的通过方法:

INSERT INTO TStudent(name,age) 
    <foreach collection="list" item="item" index="index" open="(" close=")" separator="union all">
        SELECT #{item.name} as a, #{item.age} as b
    </foreach>