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