Mybatis源码解析——KeyGenerator

mac2023-02-01  13

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设置到用户实参中去

执行流程如图所示

最新回复(0)