Mybatis 添加一條記錄並返回主鍵值


工作中遇到這樣的問題,本來以為很難解決的事情,沒想到Mybatis中一個注解就解決了。再次記錄一下。

 

@Insert("insert into user(name,age) value(#{user.name},#{user.age})")
@SelectKey(statement = "select last_insert_id()", keyProperty = "user.id", before = false, resultType = int.class) int insert_selectKeyAnotation(@Param("user") User user);
 

關於@SelectKey

關於insert()有一種需求很常見:如何確定插入數據的主鍵。對於MySQL中的自增類型主鍵,無需提供主鍵可以直接插入。還是以insert()函數為例,這個SQL語句沒有提供主鍵,主鍵是自增類型可以自動生成。
@Insert("insert into user(name,age) value(#{name},#{age})")
int insert(@Param("name") String name, @Param("age") int age);

 

下面介紹一個重要注解
@SelctKey(statement="SQL語句",keyProperty="將SQL語句查詢結果存放到keyProperty中去",before="true表示先查詢再插入,false反之",resultType=int.class)
其中:
  • statement是要運行的SQL語句,它的返回值通過resultType來指定
  • before表示查詢語句statement運行的時機
  • keyProperty表示查詢結果賦值給代碼中的哪個對象,keyColumn表示將查詢結果賦值給數據庫表中哪一列
  • keyProperty和keyColumn都不是必需的,有沒有都可以
  • before=true,插入之前進行查詢,可以將查詢結果賦給keyProperty和keyColumn,賦給keyColumn相當於更改數據庫
  • befaore=false,先插入,再查詢,這時只能將結果賦給keyProperty
  • 賦值給keyProperty用來“讀”數據庫,賦值給keyColumn用來寫數據庫
  • selectKey的兩大作用:1、生成主鍵;2、獲取剛剛插入數據的主鍵。
  • 使用selectKey,並且使用MySQL的last_insert_id()函數時,before必為false,也就是說必須先插入然后執行last_insert_id()才能獲得剛剛插入數據的ID。
 
before=false的情況
 

 

注意keyProperty不能使基本類型,因為那樣賦值之后就找不到了(相當於傳值)
注解的方式
 


免責聲明!

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



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