<?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