mybatis插入數據返回主鍵


問題定義:我們對某個數據執行了插入數據的操作之后,需要將主鍵返回,例如:訂單支付完成了,這時候我們要把待支付表中對應的數據移除

但是,如何才能准確快速的移除呢?我們希望能在添加的時候將主鍵得到,以便后面的移除操作更加方便。

 

1、自增主鍵情況下插入數據獲取自增主鍵值

mybatis為我們提供了一個方法,能夠插入數據時獲取自動生成的值,並且把取的值賦值給實體類的某一屬性

設置方法:

要求:主鍵必須是自增的

 

<insert id = "insert" useGeneratedKeys = "true" keyProperty = "id">

    SQL語句

</insert>

 

useGeneratedKeys = true  //是否返回自增主鍵值

keyProperty = "xxx"  //將值賦給哪個屬性,這個屬性是方法參數中的

 

2、主鍵非自增的情況下獲取主鍵值

一般我們使用<selectKey>來實現。一個<insert>塊中只能有一個<selectKey>

下面我們了解一下selectKey中的屬性

 

resultType:這個我們就不用解釋了,返回類型

order:它有兩個取值:1、BEFORE在添加之前查詢 2、AFTER在添加之后查詢  //這兩個都是全大寫

keyProperty:將取值賦值給方法參數,如果方法參數是實體類,一般賦值給實體類的字段

keyColumn:對應表的列名

一個selectKey中必須要有 resultType,order,keyProperty

 

after示例:查詢最后一次添加的主鍵

<insert id = "insertEmp">

    <selectKey resultType = "integer" order = "AFTER" keyProperty = "eid" >

select last_insert_id() //查詢最后一次添加的主鍵,mysql函數 </selectKey> insert into dept(id,deptname) values(#{id},#{deptname}) </insert>

 

before示例:假設Id不是自增長,我們希望在insert之前獲取mysql的UUID添加到數據表作為主鍵Id

 

<insert id = "insertDept">

    <selectKey resultType = "string" order = "BEFORE" keyProperty = "id">
        select uuid() as id

    </selectKey>

    insert into dept(id,name) values(#{id},#{name})

</insert>

 

 

3、keyColumn作用

問題定義:有時候我們希望keyProperty返回的個數超過1的時候,能不能插入數據的時候返回多個值

1、把selectKey的結果賦值給keyProperty的各個屬性

2、賦值規則:keyProperty和keColumn的列數相對應:1對1,2對2...

<insert id="xxx">
        <selectKey resultType="com.entity.Dept" order="BEFORE" keyProperty="id,name" keyColumn="cid,cname">
            select cid,cname from Category limit 1;
        </selectKey>
        insert into dept(id,name) values (#{id},#{name})
    </insert>
<!--    代碼解釋:從Category中查詢出cid,cname 賦值在方法參數中,然后添加到dept表-->

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM