Java書籤 #MyBatis之批量插入並返回自增主鍵id
楔子:當然,世上有很多優秀的女性,我也會被她們吸引。這對男人來說是理所當然的。但目光被吸引和內心被吸引是截然不同的。- 東野圭吾《黎明之街》
1.今日書籤
通過 mybatis 框架,實現SQL批量插入並返回每條數的主鍵id。
2.山重水複
通過使用 MyBatis,在插入單條資料的時候有兩種方式返回自增主鍵id:
- 對於支援生成自增主鍵的資料庫:
<insert>
標籤屬性增加useGenerateKeys 和 keyProperty
。 - 對於不支援生成自增主鍵的資料庫:在SQL語句中使用
<selectKey>
標籤。
案例詳見連結:Java書籤 #MyBatis返回插入/更新記錄的id,及selectKey標籤的巧用
3.柳暗花明
MyBatis 是支援批量插入時返回每條資料自增主鍵id的。需要注意有四點:
- 升級 MyBatis 依賴版本到 3.3.1 或以上。因為官方在這個版本中加入了批量新增返回主鍵id的功能。
- 要操作的表的主鍵id設定的是自增。
- 在 DAO interface 介面入參中不能使用 @param 註解。否則,會出現異常:
org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object. Cause: org.apache.ibatis.binding.BindingException: Parameter 'couponId' not found. Available parameters are [couponCodeList, param1]
- Mapper.xml 中的批量插入SQL入參物件變數名一定要使用
list
變數名,<insert>
標籤引數型別用parameterType="java.util.List"
接收 DAO 介面中的引數集合。否則,會出現異常:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'couponCodeList' not found. Available parameters are [collection, list]
3.1.程式碼示例
1)mybatis jar 包依賴
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.0</version>
</dependency>
2)mapper xml 示例
<insert id="saveBatch" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="couponId">
INSERT INTO
t_coupon (activity_id, coupon_code, use_status, create_user, create_time)
VALUES
<foreach collection="list" item="item" index="index" separator=",">
(#{item.activityId}, #{item.couponCode}, 0, 'meiwei', NOW())
</foreach>
</insert>
3)DAO 介面示例
public interface TCouponMapper {
int saveBatch(List<TCoupon> couponCodeList);
}
這裡的 keyProperty="couponId"
對應的是取插入表的自增id欄位,入參物件定義的自增id欄位名須與其保持嚴格一致。示例程式碼入參物件這裡使用的自增id是別名 couponId,所以 keyProperty 的返回欄位嚴格保持一致,也為 couponId。
一般情況下,入參物件的主鍵屬性定義為 id,使用 keyProperty="id"
即可。
3.2.單元測試
批量插入資料前,每條資料自增id為空:
批量插入資料後,每條資料自增id已經通過入參物件列表返回:
相關文章
- Mybatis:插入資料返回自增主鍵MyBatis
- Java MyBatis 插入資料庫返回主鍵JavaMyBatis資料庫
- MyBatis + MySQL返回插入成功後的主鍵idMyBatisMySql
- Mybatis批量插入,是否能夠返回id列表MyBatis
- MyBatis insert操作插入,返回主鍵from官方MyBatis
- 向Mysql主鍵自增長表中新增資料並返回主鍵MySql
- MyBatis在Oracle中插入資料並返回主鍵的問題解決MyBatisOracle
- select @@Identity 返回自增主鍵的值IDE
- mybatis入門程式:向資料庫中新增使用者&&自增主鍵和非自增主鍵的返回MyBatis資料庫
- MyBatis 返回(批次)新增資料的自增idMyBatis
- myBatis插入oracle獲取主鍵MyBatisOracle
- MyBatis 獲取自增主鍵MyBatis
- mybatis獲取自增主鍵MyBatis
- Sqlserver 設定 自增 主鍵ID identitySQLServerIDE
- SQLite設定主鍵自動增長及插入語法SQLite
- 自增長主鍵回顯實現,批次資料插入
- MyBatis 批量插入資料MyBatis
- Mybatis批量插入Oracle、MySQLMyBatisOracleMySql
- postgresql自增主鍵SQL
- mybatis插入資料、批量插入資料MyBatis
- Mysql關於自增主鍵,自增主鍵優化總結MySql優化
- Mybatis獲取自增主鍵的值MyBatis
- 使用Spring JDBC新增記錄如何返回自增主鍵值SpringJDBC
- 【mybatis-plus】主鍵id生成、欄位自動填充MyBatis
- 批量插入資料時主鍵衝突的處理
- Java通過Mybatis實現批量插入資料到Oracle中JavaMyBatisOracle
- java中批量插入資料jdbc hibernate Mybatis使用方式JavaJDBCMyBatis
- MySQL 中的自增主鍵MySql
- MySQL 主鍵自增也有坑?MySql
- Oracle 建立主鍵自增表Oracle
- MySQL 8 新特性之自增主鍵的持久化MySql持久化
- MyBatis Plus 批量資料插入功能,yyds!MyBatis
- MySQL 主鍵自增 Auto Increment用法MySqlREM
- MySQL新增自增主鍵的坑MySql
- postgresql重置序列和自增主鍵SQL
- 資料表設計之主鍵自增、UUID或聯合主鍵UI
- 【MyBatis】幾種批量插入效率的比較MyBatis
- java面試一日一題:mysql中的自增主鍵Java面試MySql