1. 程式人生 > >Mybatis 獲得自動生成主鍵值

Mybatis 獲得自動生成主鍵值

介紹

對於某些特殊需求:得到剛剛插入資料的主鍵值,以便對剛剛生成的資料做處理
那麼,如何得到剛插入的主鍵值呢有兩種大的方向。
第一是在資料庫獲得通過自帶方法。在資料插入之後輸入“select @@indentity”通常需要結合儲存過程,比較複雜。
第二是在後臺插入時獲得。這裡我們主要說後臺剛插入時得到主鍵值。

詳細

後臺資料插入時獲得主鍵值也分為兩種情況:支援主鍵自增資料庫和不支援主鍵自增。
一、對於支援自動生成主鍵的資料庫,如Mysql、sqlServer,可以通過 Mybatis元素useGeneratedKeys返回當前插入資料主鍵值到輸入類中。

具體應用

<insert id
="insertTest" useGeneratedKeys="true" keyProperty="id"  parameterType="com.kq.domain.IdentityTest"> insert into identity_test(name) values(#{name,jdbcType=VARCHAR}) </insert>

當執行此條插入語句以後,實體類IdentityTest中的Id會被當前插入資料的主鍵自動填充。

二、對於不支援自動生成主鍵的資料庫。Oracle、DB2等,可以用元素selectKey 回當前插入資料主鍵值到輸入類中。(同時生成一個自定義的隨機主鍵)

具體應用

<insert id="insertTest" useGeneratedKeys="true" keyProperty="id" 
 parameterType="com.kq.domain.IdentityTest">
 <selectKey keyProperty="id" resultType="String" order="BEFORE">
        SELECT  REPLACE(UUID(),'-','')  
  </selectKey>
        insert into identity_test(name)
        values(#{name,jdbcType=VARCHAR})
</insert>

當執行此條插入語句以後,實體類IdentityTest中的Id也會被當前插入資料的主鍵自動填充。

補充

selectKey 元素描述:

屬性 描述
keyProperty selectKey 語句結果應該被設定的目標屬性。如果希望得到多個生成的列,也可以是逗號分隔的屬性名稱列表。
keyColumn 匹配屬性的返回結果集中的列名稱。如果希望得到多個生成的列,也可以是逗號分隔的屬性名稱列表。
resultType 結果的型別。MyBatis 通常可以推算出來,但是為了更加確定寫上也不會有什麼問題。MyBatis 允許任何簡單型別用作主鍵的型別,包括字串。如果希望作用於多個生成的列,則可以使用一個包含期望屬性的 Object 或一個 Map。
order 這可以被設定為 BEFORE 或 AFTER。如果設定為 BEFORE,那麼它會首先選擇主鍵,設定 keyProperty 然後執行插入語句。如果設定為 AFTER,那麼先執行插入語句,然後是 selectKey 元素 - 這和像 Oracle 的資料庫相似,在插入語句內部可能有嵌入索引呼叫。
statementType MyBatis 支援 STATEMENT,PREPARED 和 CALLABLE 語句的對映型別,分別代表 PreparedStatement 和 CallableStatement 型別。

相關推薦

Mybatis 獲得自動生成

介紹 對於某些特殊需求:得到剛剛插入資料的主鍵值,以便對剛剛生成的資料做處理 那麼,如何得到剛插入的主鍵值呢有兩種大的方向。 第一是在資料庫獲得通過自帶方法。在資料插入之後輸入“select @@indentity”通常需要結合儲存過程,比較複雜。 第二

MyBatis 3 自動生成 針對不同的資料庫(oracle/sqlserver/mysql)

MyBatis自動生成的主鍵很多資料庫支援自動生成主鍵的資料型別。不過這通常(並不總是)是個私有的特性。SQL Map 通過<insert>的子元素<selectKey>來支援自動生成的鍵值。它同時支援預生成(如Oracle)和後生成兩種型別(如

JDBC自動生成

重載 res all ace date exe ++ count ada @Test public void test3(){ Connection conn = null; PreparedStatement prep

Mybatis 自動生成

介紹 像MySql、Sql Server有自動生成主鍵(遞增),Oracle只能用序列生成,或者UUID 那麼在MyBatis怎麼處理呢,有兩個處理方式,那麼我們接下來看看怎麼處理 編碼

zbb20170928 spring hibernate mysql 保存數據時自動生成 設置

ring integer 主鍵 mys unique 技術分享 ner img rate @Id @GeneratedValue @Column(name = "id", unique = true, nullable = false) public In

JPA不能自動生成

    專案使用了別人的資料庫,使用表生成的主鍵。遇到兩個問題: 1.當使用表生成主鍵的策略時,主鍵生成成功,但是執行persist方法沒有任何現象,也沒有生成sql,也可能是沒有執行persist方法。 2.無法使用id自動生成的策略,而使用自己設計的實體時是可以使用id

Mybatis批量insert 返回和foreach標籤詳解

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

關於自動生成和日期

寫專案的時候經常遇到要自動生成主鍵或一個日期,以前只是寫,現在好好整理一下 產生一個數據庫的主鍵 public static String createId() { return UUID.randomUUID().toString(); } 百度了一

Hibernate儲存資料自動生成出現奇怪異常Duplicate entry '0' for key 1

今天在寫一塊程式的時候,出現了一個異常資訊,搗鼓了一上午,終於找到了異常原因——不僅僅是簡單的主鍵衝突問題 測試資料庫:MySQL 異常資訊如下: org.hibernate.exception.ConstraintViolationException: could no

oracle插入時如何自動生成

oracle中自動生成主鍵方式例子如下: 1)先建立表: create table student( sno int not null, sname varchar(20), sex char(4), constraint PK_SNO primary key(sno) ); 2)建立序列: create

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

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

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

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

mybatis+mysql自動生成32位uuid策略

<insert id="insert" parameterType="com.bd.pojo.Book" > <selectKey keyProperty="id" resultType="String" order="BEFORE"&

六、JDBC--獲取自動生成&處理Blob&資料庫事務處理

【孤立的技術是沒有價值的】,我們這裡只是為了瞭解具體的實現步驟:我們在插入資料的時候,經常會需要獲取我們插入的這一行資料對應的主鍵值。 具體的程式碼實現: /** * 獲取資料庫自動生成的主鍵 */ @Test public void testGetKey

javaWeb_JDBC_JDBC獲取數據庫自動生成

調用 業務 count() 主鍵 tool 取數 student cto execute JDBC_JDBC獲取數據庫自動生成主鍵值 1.意義: 在操作比較復雜的數據庫表以及相關信息的時候,我們需要獲取一條記錄中的主鍵值,以便於別的業務邏輯操作該條記錄,那麽這一個時候

jdbcTemplate獲得資料庫生成

JSONObject obj = new JSONObject(); obj.put("code", transactionTemplate.execute(new TransactionCallback<Integer>() { @Overr

獲取mybaties插入記錄自動增長的

rate rec rop bsp gen 獲取 pro body 自動   首先在Mybatis Mapper文件中insert語句中添加屬性“useGeneratedKeys”和“keyProperty”,其中keyProperty是保存主鍵值的屬性。   例如:  

mybatis中useGeneratedKeys用法--插入數據庫後獲取

數據對比 style unit 方法 註意 char string int dst 前言:今天無意在mapper文件中看到useGeneratedKeys這個詞,好奇就查了下,發現能解決我之前插入有外鍵表數據時,這個外鍵獲取繁瑣的問題,於是學習敲DEMO記錄    在項

mybatis單條/批量插入返回自生成(列表)

1.插入單條記錄返回自增主鍵id(已驗證) 在insert標籤上加上useGeneratedKeys=”true” keyProperty=”id” keyColumn=”id” <insert id="insert" parameterType="com.freedom.

Mybatis MySQL 獲取自動增長

有兩種方式第一種:<insert id="insert" parameterType="vo.Category" > <selectKey resultType="java.lang.Integer" order="AFTER" keyPrope