Mybatis源码解析——KeyGenerator

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

针对所有数据库,无论是否支持主键自增均支持。

  1. BEFORE
    在执行insert之前执行<SelectKey>中的获取主键值,然后根据将得到的ResultSet设置到用户实参中去得到完整的用户实参,然后insert到数据库中去
  2. AFTER
    其原理是在执行insert之后,执行<SelectKey>中的获取主键值,然后根据将得到的ResultSet设置到用户实参中去

执行流程如图所示
在这里插入图片描述

发布了98 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Mutou_ren/article/details/102785378