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值。