Mybatis屬性useGeneratedKeys,keyProperty,keyColumn的使用


事情情景
  在做一個插入操作的時候,總是報一個主鍵重復或者字段不能為空的錯誤:

原因
  在A.mapper中的insert語句中,使用了useGeneratedKeys,keyProperty屬性,那這兩個屬性是干什么用的呢?

useGeneratedKeys=true表示使用數據庫自動增長的主鍵
keyProperty設置自增主鍵返回字段(用戶在插入數據之后獲取相應主鍵)
作用
  知道了這兩個屬性是做什么的,那起到什么作用了呢?

作用: 完成不需要輸入主鍵也能插入數據了,而且只適用於insert語句

解決方法
  知道了是什么原因造成了這個問題,那么接下來就好解決了。

  首先先檢查了數據庫中這個id字段有沒有設置為自增長和非空

  然后又去與A.mapper相關聯的另一個B.mapper中查看相應的插入語句有沒有設置這兩個屬性,果然沒寫,寫上之后完美解決問題。

<insert id="insertSelective" parameterType="com.***.UserPasswordDO" keyProperty="id" useGeneratedKeys="true">


規則
1、我們使用keyProperty屬性指定id為主鍵字段,同時使用useGeneratedKeys屬性告訴MyBatis這個主鍵是否使用數據庫的內置規則生成。
2、在數據庫中設置id的自增規則
拓展
  在使用keyProperty的時候,發現竟然還有個類似的屬性:keyColumn,那么他是干什么用的呢?

keyColumn用於指定數據庫table中的主鍵
  也就是說這是三個屬性同時使用時,則可以使用數據庫中自增長的主鍵,並且可以將主鍵的值返回給keyProperty中寫好的字段

 

 

總結:

useGeneratedKeys 設置為"true"表明要 MyBatis 獲取由數據庫自動生成的主鍵;

keyProperty="id"指定把獲取到的主鍵值注入到 Student(實體類) 的 id 屬性。

keyColumn是數據庫中主鍵名,如果數據庫主鍵名和實體類字段名都規范,可以不用keyColumn

 


免責聲明!

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



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