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
本文来源于https://blog.csdn.net/RAPIER512/article/details/51198684,如有不当,请告知删除