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

<?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.csdn.net/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.csdn.net/yanyaming920817/article/details/50393684

猜你喜欢

转载自blog.csdn.net/jiang2011tao/article/details/79741693