2.不支持生成自增主鍵的數據庫:
但是批量插入的數據如何返回自增主鍵,網上還是比較少看到,至少百度的結果比較少。
Mybatis官網信息提供如下:
首先,如果您的數據庫支持自動生成的鍵字段(例如MySQL和SQL Server),那麽您可以簡單地設置useGeneratedKeys="true "並將keyProperty設置為target屬性,這樣就完成了。例如,如果上面的Authortable為id使用了自動生成的列類型,則該語句將修改如下:
& ltinsert id = " insert author " useGeneratedKeys = " true "
keyProperty = " id " & gt
插入作者(用戶名、密碼、電子郵件、簡歷)
值(# {用戶名}、# {密碼}、# {電子郵件}、# {簡歷})
& lt/insert & gt;
如果您的數據庫也支持多行插入,您可以傳遞壹個作者列表或數組,並檢索自動生成的鍵。
& ltinsert id = " insert author " useGeneratedKeys = " true "
keyProperty = " id " & gt
插入作者(用戶名、密碼、電子郵件、簡歷)值
& ltforeach item = " item " collection = " list " separator = "," & gt
(#{item.username}、#{item.password}、#{item.email}、#{item.bio})
& lt/foreach & gt;
& lt/insert & gt;
從官網數據可以看出,Mybatis支持批量插入時返回自增主鍵。(百度說不支持,所以是個笑話。)
但是在本地測試中使用上述方法時,確實無法返回自增id,還報錯(不知道keyProperty中指定的Id屬性),然後在網上尋找相關資料。終於找到了壹些關於Stackoverflow的信息。
解決方案:
1.將Mybatis的版本升級到3.3.1。
2.不能在Dao中使用@param批註。
3.在Mapper.xml中使用list變量來接受Dao中的集合。
參考地址:
/questions/18566342/mybatis-use-generated-keys-for-batch-insert
/questions/28453475/mybatis-getting-id-from-inserted-array-of-object-returns-error
/mybatis/mybatis-3/pull/324
/questions/28453475/mybatis-getting-id-from-inserted-array-of-object-returns-error #
/Abel 533/mybatis-3/blob/master/src/main/Java/org/Apache/ibatis/executor/keygen/JDBC 3 key generator . Java