MyBatis 获取插入记录的主键?


insert into t_menu (name) values (#{name})

怎么返回的都是1????

附:
public class Menu {
private Integer id;//主键
private String name;//名称
......
}

那应该没错了的呀。你的1是在哪打印的呢?莫非你打印的是session.insert(...)的返回值?我这边打印是正常的呢

[code="java"]Menu m = new Menu();
session.insert("xxxx.insert", menu);
System.out.println("res:" + menu.getId());[/code]

首先要把你的表设成id自动增长的
如:
[code="sql"]create table t_menu (
id bigint(32) AUTO_INCREMENT NOT NULL PRIMARY KEY,

name varchar(16)
);[/code]

然后你原来的配置应该是正确的
[code="xml"]

SELECT LAST_INSERT_ID()

insert into t_menu (name) values (#{name})
[/code]

之所以会总是返回同样的值是因为LAST_INSERT_ID()的作用是返回当前连接最近一条触发AUTO_INCREMENT的语句的第一个AUTO_INCREMENT值。
如果原来的id是1,insert一条id是空的记录后,自动增长为2,LAST_INSERT_ID()会返回2;
如果是insert一条指定id值的记录,id不会自动增长,LAST_INSERT_ID()返回值不变。

主要是你t_menu的id列要设成自动增长的。在建表的时候加一下关键字AUTO_INCREMENT