KeyGenerator
该接口用于insert时的主键生成,在insert时自动生成主键并注入到用户参数中去。
public interface KeyGenerator {
//在执行insert前执行,设置属性order=“BEFORE”
void processBefore(Executor executor, MappedStatement ms, Statement stmt, Object parameter);
//在执行insert后执行,设置属性order=“AFTER”
void processAfter(Executor executor, MappedStatement ms, Statement stmt, Object parameter);
}
Jdbc3KeyGenerator
只能用于取回数据库生成的自增主键,对于不支持主键自增的数据库无法使用。
对应mybatis-config.xml中的useGeneratedKeys全局配置,以及<Insert>
节点的useGeneratedKeys属性
Jdbc3KeyGenerator.processBefore()是空实现,只实现了processAfter()
example:
<insert id = "test" useGeneratedKeys = "true" KeyProperty="Id">
insert into user(username,pwd) values
<froeach item = "item" collection="list" separator=",">
(#{item.username},#{item.pwd})
</foreach>
</insert>
执行流程如图所示
SelectKeyGenerator
针对所有数据库,无论是否支持主键自增均支持。
- BEFORE
在执行insert之前执行<SelectKey>
中的获取主键值,然后根据将得到的ResultSet设置到用户实参中去得到完整的用户实参,然后insert到数据库中去 - AFTER
其原理是在执行insert之后,执行<SelectKey>
中的获取主键值,然后根据将得到的ResultSet设置到用户实参中去
执行流程如图所示