Mybatis插入時返回自增主鍵
通過selectKey在插入操作前或者操作后獲取key值,做為字段插入或返回字段。(此段代碼獲取的序列值id作為字段值插入到實體類中返回)
1
2
3
4
5
6
|
< insert id= "insert" > <selectKey keyProperty= "id" resultType= "int" order = "AFTER" > SELECT id FROM myTable </selectKey> INSERT INTO myTable VALUES (#{id}, #{ name }) </ insert > |
useGeneratedKeys
如果數(shù)據(jù)庫支持自增長主鍵字段(比如mysql、sql server)設置useGeneratedKeys=”true”和keyProperty="Id",id 是表的主鍵名,這樣就可以插入主鍵id值
oracle則不支持自增長id,設置useGeneratedKey=”false”,如果設置true則會有報錯信息。通過nextval函數(shù),如SEQ_table.Nextval生成id
1
2
3
4
|
< insert id= "addCover" parameterType= "java.util.Map" useGeneratedKeys= "true" keyProperty= "Id" > insert into cover(title,path,update_time) values (#{title},#{path},#{update_time}) </ insert > |
1
|
int addCover(Map<String,Object> map); |
Mybatis批量插入返回自增主鍵
我們都知道Mybatis在插入單條數(shù)據(jù)的時候有兩種方式返回自增主鍵:
1、對于支持生成自增主鍵的數(shù)據(jù)庫:useGenerateKeys和keyProperty。
2、不支持生成自增主鍵的數(shù)據(jù)庫:<selectKey>。
但是怎對批量插入數(shù)據(jù)返回自增主鍵的解決方式網(wǎng)上看到的還是比較少,至少百度的結果比較少。
Mybatis官網(wǎng)資料提供如下:
First, if your database supports auto-generated key fields (e.g. MySQL and SQL Server), then you can simply set useGeneratedKeys="true" and set the keyProperty to the target property and you're done. For example, if the Authortable above had used an auto-generated column type for the id, the statement would be modified as follows:
1
2
3
4
5
|
< insert id= "insertAuthor" useGeneratedKeys= "true" keyProperty= "id" > insert into Author (username, password ,email,bio) values (#{username},#{ password },#{email},#{bio}) </ insert > |
If your database also supports multi-row insert, you can pass a list or an array of Authors and retrieve the auto-generated keys.
1
2
3
4
5
6
7
|
< 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 > |
從官網(wǎng)資料可以看出Mybatis是支持批量插入時返回自增主鍵的。(百度上說不支持的,多打臉 開玩笑的)
但是在本地測試的時候使用上述方式確實不能返回自增id,而且還報錯(不認識keyProperty中指定的Id屬性),然后在網(wǎng)上找相關資料。終于在Stackoverflow上面找到了一些信息。
解決辦法
1、升級Mybatis版本到3.3.1。
2、在Dao中不能使用@param注解。
3、Mapper.xml中使用list變量接受Dao中的集合。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/qq_34122822/article/details/79254361