mybatis做insert操作的時候 怎麼才能返回插入的那條資料的id?
阿新 • • 發佈:2019-02-20
1、useGeneratedKeys=”true” 可以獲取自增長的ID 只支援具有自增長方式的那種資料庫(mysql, mssql 等 但 oracle 就不支援了 ) 所以可以使用selectKey來獲取
eg:
<insert id="xxx" parameterType="yyy" useGeneratedKeys="true">
insert into table(...) values (...)
<selectKey resultType="long" order="AFTER" keyProperty="id">
SELECT LAST_INSERT_ID() AS id
</selectKey>
</insert>
2、對於不支援自動生成主鍵(如Oracle),可以採用以下方式
eg:
<insert id="xxx" parameterType="yyy">
<selectKey keyProperty="id" resultType="long" order="BEFORE">
select my_seq.nextval from dual
</selectKey>
...
</insert>
對於第一種更好的解決辦法:
方法:在mapper中指定keyProperty屬性,示例如下:
Xml程式碼 收藏程式碼
<insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="userId" parameterType="com.chenzhou.mybatis.User">
insert into user(userName,password,comment)
values(#{userName},#{password},#{comment})
</insert>
如上所示,我們在insert中指定了keyProperty=”userId”,其中userId代表插入的User物件的主鍵屬性。
User.java
Java程式碼 收藏程式碼
public class User {
private int userId;
private String userName;
private String password;
private String comment;
//setter and getter
}
UserDao.java
Java程式碼 收藏程式碼
public interface UserDao {
public int insertAndGetId(User user);
}
測試:
Java程式碼 收藏程式碼
User user = new User();
user.setUserName("chenzhou");
user.setPassword("xxxx");
user.setComment("測試插入資料返回主鍵功能");
System.out.println("插入前主鍵為:"+user.getUserId());
userDao.insertAndGetId(user);//插入操作
System.out.println("插入後主鍵為:"+user.getUserId());
輸出:
Shell程式碼 收藏程式碼
插入前主鍵為:0
插入後主鍵為:15
如上所示,剛剛插入的記錄主鍵id為15