mybatis 插入数据获取自增列id的两种方式

本文介绍在MyBatis中使用三种不同方式获取插入数据后的自增ID,并解决了一个因keyProperty设置不当导致的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/mybatis-3-mapper.dtd">
<mapper namespace="cn.kolbe.mybatis.domain.UserMapper">
	
	<insert id="getGeneratedKey1" parameterType="cn.kolbe.mybatis.domain.User">
		insert into users(name, password) values(#{name}, #{password})	
	</insert>
	
	<!-- useGeneratedKeys默认值为false,keyProperty的值对应的是User类中的主键名 -->
	<insert id="getGeneratedKey2" parameterType="cn.kolbe.mybatis.domain.User" useGeneratedKeys="true" keyProperty="id">
		insert into users(name, password) values(#{name}, #{password})	
	</insert>

	<insert id="getGeneratedKey3" parameterType="cn.kolbe.mybatis.domain.User">
		<!-- 使用这种方式要注意,resultType是要设置的,否则将抛异常,该值对应的User类中的主键类型 -->
		<!-- keyProperty对应的是User类中的主键名,假设取名为user_id,则这边也要改成user_id -->
		<selectKey keyProperty="id" resultType="int">
			select LAST_INSERT_ID()
		</selectKey>
		insert into users(name, password) values(#{name}, #{password})	
	</insert>

</mapper>

参考:https://blog.youkuaiyun.com/happylife_haha/article/details/51993350

插入数据获取自增Id报错

nested exception is org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object. Cause: org.apache.ibatis.binding.BindingException: Parameter 'listId' not found. Available parameters are [metricDataRecoveryVo, param1]; nested exception is org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object. Cause: org.apache.ibatis.binding.BindingException: Parameter 'listId' not found. Available parameters are [metricDataRecoveryVo, param1] error

示例代码:

public void insertMetricDataRecovery(
            @Param("metricDataRecoveryVo") MetricDataRecoveryVo metricDataRecoveryVo);

<insert id="insertMetricDataRecovery" parameterType="com.webank.ims.config.bean.metric.MetricDataRecoveryVo" useGeneratedKeys="true" keyProperty="listId">
		insert into ims_metric_data_recovery_list(recovery_date,start_time,end_time,from_source,to_source,id_range,id_list) 
		values(#{metricDataRecoveryVo.recoveryDate},#{metricDataRecoveryVo.startTime},#{metricDataRecoveryVo.endTime},#{metricDataRecoveryVo.fromSource}
		,#{metricDataRecoveryVo.toSource},#{metricDataRecoveryVo.idRange},#{metricDataRecoveryVo.idList})
	</insert>

发现是keyPropety设置的问题。改为keyProperty="metricDataRecoveryVo.listId"就可以。我认为这和接口定义了注解有关,如果不用@Param来指定名称,可能就没有问题(待验证)。

参考:https://blog.youkuaiyun.com/yanyaming920817/article/details/50393684

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值