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資料庫
- 向Mysql主鍵自增長表中新增資料並返回主鍵MySql
- mybatis入門程式:向資料庫中新增使用者&&自增主鍵和非自增主鍵的返回MyBatis資料庫
- select @@Identity 返回自增主鍵的值IDE
- 【mybatis-plus】主鍵id生成、欄位自動填充MyBatis
- mybatis獲取自增主鍵MyBatis
- MyBatis 獲取自增主鍵MyBatis
- mybatis插入資料、批量插入資料MyBatis
- SQLite設定主鍵自動增長及插入語法SQLite
- 自增長主鍵回顯實現,批次資料插入
- 使用Spring JDBC新增記錄如何返回自增主鍵值SpringJDBC
- postgresql自增主鍵SQL
- MyBatis從插入語句中檢索自動生成的IDMyBatis
- Mysql關於自增主鍵,自增主鍵優化總結MySql優化
- Mybatis獲取自增主鍵的值MyBatis
- Java通過Mybatis實現批量插入資料到Oracle中JavaMyBatisOracle
- Mybatis-Plus3.0預設主鍵策略導致自動生成19位長度主鍵id的坑MyBatisS3
- MyBatis Plus 批量資料插入功能,yyds!MyBatis
- MySQL 主鍵自增也有坑?MySql
- MySQL 中的自增主鍵MySql
- MySQL 8 新特性之自增主鍵的持久化MySql持久化
- 【MyBatis】幾種批量插入效率的比較MyBatis
- MySQL 主鍵自增 Auto Increment用法MySqlREM
- postgresql重置序列和自增主鍵SQL
- MySQL新增自增主鍵的坑MySql
- 深入分析Mybatis 使用useGeneratedKeys獲取自增主鍵MyBatis
- mybatis oracle資料庫批次插入資料,忽略主鍵重複MyBatisOracle資料庫
- MyBatis中批量插入資料,多重forEach迴圈MyBatis
- 使用Mybatis批量插入大量資料的實踐MyBatis
- 向資料庫中插入一條新的資料,並返回新增資料的ID資料庫
- MyBatis的Insert操作自增主鍵的實現,Mysql協議與JDBC實現MyBatisMySql協議JDBC
- SqlServer主鍵和自增長設定SQLServer
- MogDB/openGauss如何實現自增主鍵
- Laravel 中使用 Redis 生成自增主鍵LaravelRedis
- PostgreSQL 建立主鍵自增表的 DDLSQL
- MySQL8自增主鍵變化MySql
- MySQL自增主鍵跳號問題MySql