在开发中,通常会有这种情况:在插入数据库记录后,想得到插入记录的主键,用以后面的业务代码,那么mybatis针对这种情况提供了相应的支持(不支持批量插入)。假设一张MySQL数据库中的user表,其中id为自增主键。那么在开发时我们要获取一条刚插入的user记录的id,此时分两种情况。
接口映射器SQL(通过注解写的SQL)
例如:
@Insert("insert into sys_user(username, password) values(#{username}, #{password})
int save(User user);
这种情况,我们要获取新插入记录的主键id的值同样也通过添加注解获取。添加如下注解。
/** *useGeneratedKeys:是否允许JDBC支持自动生成主键,true表示允许 *keyProperty:JavaBean中的属性名,对应user表中的id字段,即需要自增的字段。不是数据库表的字段名,这里要注意! */ @Options(useGeneratedKeys = true, keyProperty = "id")
完整代码:
@Options(useGeneratedKeys = true, keyProperty = "id")
@Insert("insert into sys_user(username, password) values(#{username}, #{password}")
int save(User user);
- XML映射器SQL(xxxMapper.xml中写的SQL)
例如:
<insert id="save" parameterType="User">
insert into sys_user(username, password) values(#{username}, #{password}
</insert>
这种情况,我们需要再添加两个属性:
1、useGeneratedKeys="true"
2、keyProperty="id"
这两个属性与上面所讲的注解中的两个属性作用相同,这里不再赘述。
完整代码如下:
<insert id="save" parameterType="User" useGeneratedKeys="true" keyProperty="id">
insert into sys_user(username, password) values(#{username}, #{password}
</insert>
- 接收与使用自增主键
通过如上的配置后,我们便可以在业务代码中接收返回的自增id。代码如下:
@Override
public User saveUser(UserDto userDto) {
User user = userDto;
userDao.save(user);
Integer userId = user.getId();
return user;
}
这样我们便能尽情使用刚插入的记录的id了。