mysql:
<insert id="saveUser" parameterType="cn.zg.domain.User">
insert into user(username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address});
<!--获取新增用户自增长的id值-->
<selectKey resultType="int" keyProperty="id" keyColumn="id" order="AFTER">
select last_insert_id();
</selectKey>
</insert>
keyProperty:即parameterType的id字段,
oralce部分转自此处
oracle:
如果数据库的并发率很高,比如在插入记录后执行查询主键之前,数据库又执行了若干条插入记录的SQL语句,这时,通过表 1 返回的主键值就是最后一条插入语句的主键值,而非我们希望的主键值了。所以使用查询语句获取表自增键值是不安全的,这也是为什么有些数据库(如 Oracle、Firebird)故意不提供自增键,而只提供序列的原因,序列强制要求你在新增记录前,先获取主键值。Oracle通过SELECT <SEQUENCE_NAME>.nextval FROM DUAL获取序列的下一个值,而FireBird通过SELECT GEN_ID(<SEQUENCE_NAME> 1) FROM RDB$DATABASE获取序列的下一个值。