MyBatis 3的自增ID的Bug(续)
作者:chszs
转载请注明出处!
自上次我提出MyBatis 3的Bug之后,见:http://blog.csdn.net/chszs/archive/2011/03/31/6292719.aspx
我把Bug提交到MyBatis的官方网站,见http://code.google.com/p/mybatis/issues/detail?id=287
问题描述如下:
Eclipse Java Project: 1. SqlMapConfig.xml <?xml version="1.0" encoding="UTF-8" ?>olor:#ff9900;text-decoration:none;" href="http://mybatis.org/dtd/mybatis-3-config.dtd" rel="nofollow">http://mybatis.org/dtd/mybatis-3-config.dtd"> 2. mysql.sql USE test; 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 DEFAULT CHARSET=utf8; 3. WorkerMapper package com.dao; import com.entity.Worker; public interface WorkerMapper { int insertWorker(Worker worker); } 4. Worker.java package com.entity; public class Worker { private Integer id; private String pin; private String firstname; private String lastname; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getPin() { return pin; } public void setPin(String pin) { this.pin = pin == null ? null : pin.trim(); } public String getFirstname() { return firstname; } public void setFirstname(String firstname) { this.firstname = firstname == null ? null : firstname.trim(); } public String getLastname() { return lastname; } public void setLastname(String lastname) { this.lastname = lastname == null ? null : lastname.trim(); } } 5. WorkerMapper.xml <?xml version="1.0" encoding="UTF-8" ?>olor:#ff9900;text-decoration:none;" href="http://mybatis.org/dtd/mybatis-3-mapper.dtd" rel="nofollow">http://mybatis.org/dtd/mybatis-3-mapper.dtd" > select LAST_INSERT_ID() insert into worker pin, firstname, lastname, #{pin,jdbcType=VARCHAR}, #{firstname,jdbcType=VARCHAR}, #{lastname,jdbcType=VARCHAR}, 6. Test.java /** * @Author: Li.Qiang * @Date: 2011-3-9 */ package com.test; import java.io.Reader; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.entity.Worker; public class Test { public static void main(String[] args) throws Exception{ String resource = "conf/SqlMapConfig.xml"; Reader reader = Resources.getResourceAsReader(resource); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader); SqlSession session = factory.openSession(); Worker worker = new Worker(); worker.setPin("123456"); worker.setFirstname("Tom"); worker.setLastname("Jack"); try{ for(int i=0; i
得到MyBatis作者的反馈,语句本身有int型的返回值,表示插入的条数。故在语句内想使用
返回自增ID自动生成的ID值是不可能的。
可以单独用语句来完成返回自增ID自动生成的ID值。