对Mybatis传参使用了@Param之后执行插入操作返回主键的问题解决办法

今天做项目时,遇到了需要返回刚插入数据的自增主键ID的问题,发现从object中getId返回对的一直是空的,上网查了资料的都是

类似于这样,
 
        
            SELECT LAST_INSERT_ID()
        
        insert into t_user (username,password,create_date) values(#{username},#            
       {password},#{createDate})

对应的dao都是这样类型

int insertAndGeyKey(User user);

但是我项目里面使用了@Param注解,而且是传入了两个参数如下:

public Long insertExpression(@Param("orgId") Long orgId,@Param("expression") EventEmotionExpression expression);

最开始我的sql文件里是这么写的:


		
			select last_insert_id()
		
		insert into event_emotion_expression_#{orgId}
		  
		values(
			#{expression.eventId},#{expression.name},
			#{expression.weight},#{expression.categoryId},
			#{expression.sourceStartTime},#{expression.sourceEndTime},
			#{expression.insertDate}
		)
	

搞了好久发现返回的ID一直都是null,马上都要开始怀疑人生了,后来终于有了突破,因为selectkey标签是负责查询本次插入数据使用的主键ID然后复制到对应的keyProperty对一个的属性上,而我的id属性是在expression对象上的,只写了一个id肯定是赋值不上去的,所以keyProperty的属性需要写为“expression.id”,完美解决。

最后的sql文件为:


		
			select last_insert_id()
		
		insert into event_emotion_expression_#{orgId}
		  
		values(
			#{expression.eventId},#{expression.name},
			#{expression.weight},#{expression.categoryId},
			#{expression.sourceStartTime},#{expression.sourceEndTime},
			#{expression.insertDate}
		)
	

 

你可能感兴趣的:(Mybatis)