MySQL如何自動獲取主鍵(MyBatis執行Insert操作返回自增主鍵)

你好我是辰兮,很高興你能來閱讀。本篇整理了項目實戰遇到的問題,解決如何獲取數據庫中自增的主鍵問題。


一、項目案例

比如現在一個學生Student表 有三個字段 id(主鍵自增) name age;

你增加一個學生,你只是添加了name 和 age 但是你想獲取新增學生的主鍵。應該如何獲取呢?

/**
 * 添加學生信息
 * @param student 學生實例
 * @return 成功操作的記錄數目
 */
int add(Student student);

正常Mybatis操作

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

執行Insert(插入)操作後獲取記錄主鍵

解決方法一

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

解決方法二

<insert id="add" parameterType="Student">
  // 下面是SQLServer獲取最近一次插入記錄的主鍵值的方式
  <selectKey resultType="java.lang.Long" keyProperty="id" order="AFTER">
     SELECT LAST_INSERT_ID() AS id
  </selectKey>
  insert into Student(name, age) values(#{name}, #{age})
</insert>

由於方法二獲取主鍵的方式依賴數據庫本身,因此推薦使用方法一。


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

useGeneratedKeys ,取值範圍true|false(默認值),設置是否使用JDBC的getGenereatedKeys方法獲取主鍵並賦值到keyProperty設置的領域模型屬性中。


二、實戰分享

分享一下我項目實戰中遇到的相關問題:只展示postman的測試部分。

場景:像CSDN博客評論一樣,評論完後還要返回評論。

在這裏插入圖片描述

問題是:評論表的評論id是自動增長的,你傳的時候不用傳評論id,點贊數,用戶頭像,用戶姓名等等,但是你返回的時候這些東西都是要有的,所以你要自己封裝進去。


正常Mybatis操作:postman的測試傳評論

我們可以發現傳入的什麼返回的就是什麼 如id爲null
在這裏插入圖片描述

在Mybatis中進行配置:postman的測試傳評論
在這裏插入圖片描述
我們發現我們可以獲取到評論的id,這個評論id是數據庫自增的,但是通過配置可以自動裝配並返回過來。


Hope that we can grow and progress as soon as possible and become an excellent Java Development Engineer.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章