1. 程式人生 > >MyBatis插入記錄時返回主鍵id的方法

MyBatis插入記錄時返回主鍵id的方法

str 字段 () into tty ava 通過 vat 進行

  有時候插入記錄之後需要使用到插入記錄的主鍵,通常是再查詢一次來獲取主鍵,但是MyBatis插入記錄時可以設置成返回主鍵id,簡化操作,方法大致有兩種。

對應實體類:

1 public class User {
2     private int userId;
3     private String userName;
4     private int userAge;
5 }

對應DAO類:

1 public interface UserMapper {
2     int save(User user);
3 }

方法一、使用useGeneratedKeys屬性。

1 <insert id="save" useGeneratedKeys="true" keyProperty="userId" keyColumn="id">
2     INSERT INTO user (id, name, age)
3     VALUES (UUID(), #{userName}, #{userAge})
4 </insert>

該方法只支持主鍵非自增的情況。只需要在插入的方法標簽上,添加useGeneratedKeys、keyProperty、keyColumn三個屬性。

useGeneratedKeys:true,表示允許獲取自增主鍵。

keyProperty:表示實體對象中主鍵的屬性名稱。

keyColumn:表示數據庫中主鍵的字段名稱。

使用的時候,就正常調用這個方法就好,會將返回的主鍵存入參數User實體的userId屬性中(詳見最後說明)。

方法二、使用selectKey標簽。

(1)主鍵自增的情況。

1 <insert id="save">
2     <selectKey keyProperty="userId" order="AFTER" resultType="java.lang.Integer">
3         SELECT LAST_INSERT_ID()
4 </selectKey> 5 INSERT INTO user (name, age) 6 VALUES (#{userName}, #{userAge}) 7 </insert>

(2)主鍵非自增的情況。

1 <insert id="save">
2     <selectKey keyProperty="userId" order="BEFORE" resultType="java.lang.String">
3         SELECT UUID()
4     </selectKey>
5     INSERT INTO user (id, name, age)
6     VALUES (#{userId}, #{userName}, #{userAge})
7 </insert>

在插入的方法標簽裏,加入selectKey標簽,對應屬性說明如下:

keyProperty:表示實體對象中主鍵的屬性名稱。

order:表示該標簽執行的先後,值分為BEFORE、AFTER。主鍵自增的情況下使用AFTER,在插入操作後獲取到主鍵;主鍵非自增的情況下使用BEFORE,在插入操作前獲取到主鍵。

resultType:主鍵的類型。

使用的時候,就正常調用這個方法就好,會將返回的主鍵存入參數User實體的userId屬性中(詳見最後說明)。

三、總結

  方法一寫起來比較簡潔,但是不支持主鍵非自增的情況。方法二則相對靈活,可以根據主鍵是否自增進行對應的配置。且在主鍵非自增情況下,主鍵是可以根據自己需求進行調整的,即SELECT UUID()這句,可以調整如下:

1 SELECT upper(replace(UUID(), -, ‘‘))

  PS:save方法的返回值是插入所影響的行數,並不是主鍵;主鍵的返回方式,兩種方法是一樣的,都是通過傳入參數User實體的userId屬性來獲取,如下:

1     public void save() {
2         User user = new User();
3         user.setUserName("peter");
4         user.setUserAge(20);
5         int rs = userMapper.save(user);
6         System.out.println("插入主鍵為:" + user.getUserId());
7         System.out.println("插入影響行數:" + rs);
8     }

MyBatis插入記錄時返回主鍵id的方法