数据变更语句 insert、update、delete的实现非常接近
insert元素,MyBatis会在执行插入之后返回一个整数,以表示你进行操作后插入的记录数
update、delete元素,MyBatis执行完之后会返回一个整数,标出执行后影响的记录数。
1.Insert, Update, Delete 标签元素属性
- 1.id
与select标签的id属性含义一样。作为唯一标识来代表这条语句。
- 2.parameterType
定义传入参数的完全限定类名或者别名。
- 3.flushCache
boolean属性,默认值为true。任何时候只要语句被调用,都会导致本地缓存和二级缓存都会被清空。select标签默认是false。
- 4.timeout
设置超时时间,单位为秒。
- 5.statementType
枚举属性,有三个枚举:STATEMENT、PREPARED 、CALLABLE 。告诉JDBC使用哪个statement工作。默认值为PREPARED
- 6.useGeneratedKeys(仅对 insert 和 update 有用)
boolean属性。默认值为false。表明数据库是否采用自增长的字段。
- 7.keyProperty(仅对 insert 和 update 有用)
表示以哪个列作为属性的主键。不能与KeyColumn同时使用。联合主键可以用逗号(,)隔开。
- 8.keyColumn(仅对 insert 和 update 有用)
表示第几列是主键。只接受整形参数。不能与keyProperty同时使用。联合主键用逗号(,)隔开。
- 9.databaseId
如果配置了 databaseIdProvider,MyBatis会加载所有的不带 databaseId或匹配当前databaseId的语句;如果带或者不带的语句都有,则不带的会被忽略。
2.示例
<insert id="insertAuthor">
insert into Author (id,username,password,email,bio)
values (#{id},#{username},#{password},#{email},#{bio})
</insert>
<update id="updateAuthor">
update Author set
username = #{username},
password = #{password},
email = #{email},
bio = #{bio}
where id = #{id}
</update>
<delete id="deleteAuthor">
delete from Author where id = #{id}
</delete>
3.insert的主键回填
当我们执行对一个对象插入操作后,需要获取插入后的对象的主键。那我们就指定useGeneratedKeys属性及keyProperty属性
<insert id="insert" useGeneratedKeys="true" keyProperty="id">
INSERT INTO student (
`name`,
`age`,
`rowStatus`,
`createdOn`
) VALUES (
#{name},
#{age},
#{rowStatus},
#{createdOn}
)
</insert>
MyBatis执行插入成功后,会把自增id的属性映射到POJO的id属性上。
4.批量插入
如果你的数据支持多行插入,你也可以传入一个数组或者集合,并返回自动生成的主键。
<insert id="insertAuthor" useGeneratedKeys="true"
keyProperty="id">
insert into Author (username, password, email, bio) values
<foreach item="item" collection="list" separator=",">
(#{item.username}, #{item.password}, #{item.email}, #{item.bio})
</foreach>
</insert>