在 MyBatis 中,插入數據后可以通過返回主鍵值來獲取生成的主鍵。以下是幾種方法可以實現這一目的:
selectKey
元素:可以在插入數據的 SQL 語句中使用selectKey
元素來獲取生成的主鍵。例如:<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
INSERT INTO user (username, password) VALUES (#{username}, #{password})
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
SELECT LAST_INSERT_ID()
</selectKey>
</insert>
在這個例子中,useGeneratedKeys="true"
表示要使用自動生成的主鍵,keyProperty="id"
指定主鍵的屬性名,<selectKey>
元素中的SELECT LAST_INSERT_ID()
表示獲取最后插入的主鍵值。
@Options
注解:在接口方法上使用@Options
注解,可以指定生成主鍵的方式。例如:@Options(useGeneratedKeys = true, keyProperty = "id")
@Insert("INSERT INTO user (username, password) VALUES (#{username}, #{password})")
void insertUser(User user);
在這個例子中,useGeneratedKeys = true
表示要使用自動生成的主鍵,keyProperty = "id"
指定主鍵的屬性名。
KeyGenerator
接口:可以自定義一個KeyGenerator
接口來生成主鍵,并在@SelectKey
注解中指定該KeyGenerator
。例如:@Insert("INSERT INTO user (username, password) VALUES (#{username}, #{password})")
@SelectKey(statement = "SELECT nextval('user_id_seq')", keyProperty = "id", before = false, resultType = Long.class, keyColumn = "id")
void insertUser(User user);
在這個例子中,@SelectKey
注解中的statement
屬性指定了生成主鍵的 SQL 語句,keyProperty
指定了主鍵的屬性名。