本文主要是介绍Mybatis中获取新添加记录的主键id且不受并发影响的方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
需求场景
向主键 自增 的数据库表中插入一条新记录,需要立即获取最新插入记录的id信息,用于后续处理
解决办法
- 使用
select max(id) from tablename
缺点: 需要考虑并发的情况
举例: a向数据库表C插入一条记录,b向数据库表C插入另一条记录,且b执行插入操作是在a获取最新插入记录的id操作之前。因此,a使用select max(id) from tablename
方法获取的id实际上是b插入的最新记录的id - 使用
LAST_INSERT_ID
优点: 解决了并发问题,因为LAST_INSERT_ID
是线程安全的
举例:
<insert id="insertOfReturnId" parameterType="com.taobao.rigel.rap.model.Parameter" useGeneratedKeys="true" keyProperty="id">insert into tb_parameter_copy (name, identifier, data_type, remark, mock_data, must, packageName, source, defaultVal) values (#{name}, #{identifier}, #{dataType}, #{remark}, #{mockData}, #{must}, #{packageName}, #{source}, #{defaultVal})<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">select LAST_INSERT_ID()</selectKey>
</insert>
其中:parameterType的参数类型可改成java.util.Map
int numberOfAffectedRows = parameterService.insertOfReturnId(parameter);
返回值numberOfAffectedRows表示受影响的行数,若要获取自增主键的id值可通过parameter.getId()得到
这篇关于Mybatis中获取新添加记录的主键id且不受并发影响的方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!