版权声明:本文为博主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]