天天看点

MyBatis 3的Bug

版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/6292719

MyBatis 3的Bug

作者:chszs

转载请注明出处!

版本:MyBatis 3.0.4      
Bug为:插入语句不能正确返回自增字段的值。

MySQL数据库脚本:      
CREATE TABLE `worker` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `pin` varchar(64) DEFAULT NULL,
  `firstname` varchar(64) DEFAULT NULL,
  `lastname` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
      
对应的sqlmap映射
<insert id="addWorker" parameterType="Worker" useGeneratedKeys="true" keyProperty="id">
  	<selectKey resultType="int" keyProperty="id" order="AFTER"> 
		select LAST_INSERT_ID() as value
	</selectKey>
	insert into worker (pin, firstname, lastname) 
  values (#{pin}, #{firstname}, #{firstname}) 
</insert> 
      
对应的实体类Worker.java、DAO、接口、配置等通通省略......
      
执行的结果是只能返回1,得不到真正想要的自增字段的值。      

————————————————

目前对此Bug的替代性的解决方法是:

专门为取ID进行配置:

<select id="getWorkerId" resultType="int" >

    select LAST_INSERT_ID()

</select>

相当于执行了两条SQL语句才取得所需的ID值。[e01]