數據變更語句 insert、update、delete的實現(xiàn)非常接近
insert元素肄鸽,MyBatis會在執(zhí)行插入之后返回一個整數,以表示你進行操作后插入的記錄數
update油啤、delete元素典徘,MyBatis執(zhí)行完之后會返回一個整數,標出執(zhí)行后影響的記錄數益咬。
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同時使用刹悴。聯(lián)合主鍵可以用逗號(,)隔開。
- 8.keyColumn(僅對 insert 和 update 有用)
表示第幾列是主鍵攒暇。只接受整形參數土匀。不能與keyProperty同時使用。聯(lián)合主鍵用逗號(,)隔開形用。
- 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的主鍵回填
當我們執(zhí)行對一個對象插入操作后,需要獲取插入后的對象的主鍵镇饺。那我們就指定useGeneratedKeys屬性及keyProperty屬性
<insert id="insert" useGeneratedKeys="true" keyProperty="id">
INSERT INTO student (
`name`,
`age`,
`rowStatus`,
`createdOn`
) VALUES (
#{name},
#{age},
#{rowStatus},
#{createdOn}
)
</insert>
MyBatis執(zhí)行插入成功后乎莉,會把自增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>