1. 程式人生 > >MyBatis Insert返回主鍵和批量插入

MyBatis Insert返回主鍵和批量插入

一、 insert元素 屬性詳解                            

  其屬性如下:

   parameterType ,入參的全限定類名或類型別名

   keyColumn ,設定資料表自動生成的主鍵名。對特定資料庫(如PostgreSQL),若自動生成的主鍵不是第一個欄位則必須設定

   keyProperty ,預設值unset,用於設定getGeneratedKeys方法或selectKey子元素返回值將賦值到領域模型的哪個屬性中

   useGeneratedKeys ,取值範圍true|false(預設值),設定是否使用JDBC的getGenereatedKeys方法獲取主鍵並賦值到keyProperty設定的領域模型屬性中。MySQL和SQLServer執行auto-generated key field,因此當資料庫設定好自增長主鍵後,可通過JDBC的getGeneratedKeys方法獲取。但像Oralce等不支援auto-generated key field的資料庫就不能用這種方法獲取主鍵了

   statementType ,取值範圍STATEMENT,PREPARED(預設值),CALLABLE

   flushCache ,取值範圍true(預設值)|false,設定執行該操作後是否會清空二級快取和本地快取

   timeout ,預設為unset(依賴jdbc驅動器的設定),設定執行該操作的最大時限,超時將拋異常

二、一般的INSERT操作——返回值為插入的記錄數目                

mapper介面程式碼:

/**
 * 新增學生資訊
 * @param student 學生例項
 * @return 成功操作的記錄數目
 */
int add(EStudent student);

mapper.xml:

<insert id="add" parameterType="EStudent">
  insert into TStudent(name, age) values(#{name}, #{age})
</insert

三、執行INSERT操作後獲取記錄主鍵

<insert id="add" parameterType="EStudent" useGeneratedKeys="true" keyProperty="id">
    insert into TStudent(name, age) values(#{name}, #{age})
</insert>

四、 selectKey子元素 詳解                            

  作用:在insert元素和update元素中插入查詢語句。

  其屬性如下:

     keyProperty ,預設值unset,用於設定getGeneratedKeys方法或selectKey子元素返回值將賦值到領域模型的哪個屬性中

     resultType ,keyPropety所指向的屬性類全限定類名或類型別名

     order屬性 ,取值範圍BEFORE|AFTER,指定是在insert語句前還是後執行selectKey操作

     statementType ,取值範圍STATEMENT,PREPARED(預設值),CALLABLE

注意:selectKey操作會將操作查詢結果賦值到insert元素的parameterType的入參例項下對應的屬性中。並提供給insert語句使用

五、批量插入                                 

  方式1:

<insert id="add" parameterType="EStudent">
    <foreach collection="list" item="item" index="index" separator=";">
        INSERT INTO TStudent(name,age) VALUES(#{item.name}, #{item.age})
    </foreach>
</insert>

不過上述方式相當語句逐條INSERT語句執行,將出現如下問題:
1. mapper介面的add方法返回值將是最一條INSERT語句的操作成功與否(即0或1),而不是所有INSERT語句的操作成功的總記錄數目
2. 當其中一條不成功時,不會進行整體回滾

解決上述問題可以利用下面的通過方法:

INSERT INTO TStudent(name,age) 
    <foreach collection="list" item="item" index="index" open="(" close=")" separator="union all">
        SELECT #{item.name} as a, #{item.age} as b
    </foreach>



相關推薦

MyBatis Insert返回批量插入

一、 insert元素 屬性詳解                               其屬性如下:    parameterType ,入參的全限定類名或類型別名    keyColumn ,設定資料表自動生成的主鍵名。對特定資料庫(如PostgreSQL

mybatis 獲取insert 返回 批量插入insert

mybatis 獲取insert 返回的主鍵 id <insert id="insertSelective" parameterType="com.vip.collection.manager.sms.entity.SmsTask" > insert into s

MybatisInsert操作詳解(返回批量插入

一、前言                                      資料庫操作怎能少了INSERT操作呢?下面記錄MyBatis關於INSERT操作的筆記,以便日後查閱。 二、 insert元素 屬性詳解                       

mybatis insert 返回id

mybatis insert 返回主鍵id 一、如果是springMVC框架的話。 前提條件: 需要在ibatis  Configuration中設定UseGeneratedKeys為true Configuration cfg = new org.apache.ibati

Mybatis批量insert 返回foreach標籤詳解

  Mybatis批量insert 返回主鍵 Mybatis從3.3.1版本開始,支援批量插入後返回主鍵ID。首先對於支援自增主鍵的資料庫使用useGenerateKeys和keyProperty,對於不支援生成自增主鍵的資料庫使用selectKey標籤。類似《MyBatis 返回insert操

mybatis 批量insert 返回(例項)

轉: https://www.jianshu.com/p/be01aa549fdd   mybatis 批量insert 返回主鍵(例項)  狗尾巴草也開花 關注 2017.07.30 23:16* 字數 88 閱讀 949評論

Mybatis generator 自動生成程式碼時 ,insert返回

mvn mybatis-generator:generate 如果要讓generator自動新增該功能,可以如下配置: <!-- tableName:用於自動生成程式碼的資料庫表;domainObjectName:對應於資料庫表的javaBean類名;不需要生成Ex

關於 mybatis oracle insert 返回(uuid)的操作

   所謂返回主鍵,並不是說我需要在insert的時候直接返回uuid。實際上是什麼意思呢?比如我在執行一個插入操作,入參物件中並沒有傳入主鍵id,我們需要在mybatis中生成這個主鍵,並且在插入到資料庫中的同時,給我這個入參的主鍵id也賦值。這樣在我執行完inser操作後

記錄 - mybatis @Param引數繫結批量插入

需求:要在同一個groupId下批量插入單品。 資料庫如下: CREATE TABLE `goods` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '單品id', `url` varchar(300) NOT NULL

mybatis insert 獲取

根據業務需求,我們常常需要在 insert 插入一條資料後,對剛剛插入的資料進行某種操作;這時就需要獲取新新增的資料的主鍵,如果主鍵是自增的話,重新查詢,比較麻煩;mybatis 提供了一種配置,可以在 insert 執行後獲取到新新增資料的主鍵 配置如下 <i

Mybatis+Mysql返回

使用MyBatis往MySQL資料庫中插入一條記錄後,成功則返回1,即成功的條數。如果要返回該條記錄的自增主鍵值,在mapper中指定keyProperty屬性,例如: (1) <insert id="insert" useGeneratedKeys="true" k

深入淺出mybatis返回ID

目錄 新增記錄後獲取主鍵ID,這是一個很常見的需求,特別是在一次前端呼叫中需要插入多個表的場景。 除了新增單條記錄時獲取主鍵值,有時候可能需要獲取批量新增記錄時各記錄的主鍵值,MyBatis從3.3.1版本開始支援批量新增記錄並返回各記錄主鍵欄位值。 新增單一記錄時返

mybatis單條批量插入返回插入成功後的id

有些時候我們在新增記錄成功後希望能直接獲取到該記錄的主鍵id值,而不需要再執行一次查詢操作。在使用mybatis作為ORM元件時,可以很方便地達到這個目的。鑑於mybatis目前已經支援xml配置和註解2種方式,所以分別給予詳細介紹。使用xml配置方式1.xml配置:<!-- 插入資料:返回記錄的id值

Mybatis之MySql批量insert返回

app bsp long 需求 values ram value tis pub 需求:使用批量插入後,需要insert之後的每一條記錄的ID 註意:Mybatis3.3.1的版本以後支持批量插入後返回主鍵ID 示例: domin.java: public class U

MyBatisinsert插入操作時返回ID的配置

很多時候,在向資料庫插入資料時,需要保留插入資料的id,以便進行後續的update操作或者將id存入其他表作為外來鍵。 但是,在預設情況下,insert操作返回的是一個int值,並且不是表示主鍵id,而是表示當前SQL語句影響的行數。。。 接下來,我們看看MyBatis如

Mybatis+Mysql 批量插入的時候返回ID

<insert id="insertAlarmLinkmanList" useGeneratedKeys="true" keyProperty="alarmLinkmanId" > insert into alarm_linkman (user_name,

Mybatis批量插入返回筆記

1.mapper中的程式碼 int insertBatchUserReturnId(List<User> users); 也可以在形參前面加上@Param("xxxx") xml中的程式碼,collection必須填list型別 <insert id="insert

MyBatisinsert插入操作時返回ID的配置

很多時候,在向資料庫插入資料時,需要保留插入資料的id,以便進行後續的update操作或者將id存入其他表作為外來鍵。 但是,在預設情況下,insert操作返回的是一個int值,並且不是表示主鍵i

Mybatis 批量插入返回 ID

官方修復 https://github.com/mybatis/mybatis-3/pull/547 注:使用時 mapper中的 collection 引數必須為 list,即外部的mapper

mybatis插入insert useGeneratedKeys返回事務支援

繼上次分享的mybatis插入insert返回註解id後今天和大家分享一個大家遇到的一個小問題,就是mybatis執行insert返回主鍵id時,當在service層的某個方法新增事務時會發現主鍵是返回不了的,如果是這種情況的話請耐心看下去。ok,還是繼續上次使用useGen