有这么一个场景:
使用mybatis insert操作,需要新增记录的主键Id,可以配置useGeneratedKeys=true 并且keyProperty=xxx。
这样,mybatis 就把主键Id回填至入参object。
useGeneratedKeys 是怎样实现的?
首先需要明确的是,insert 执行完成后,才发生的主键回填的事件。如下所示:
public int update(Statement statement) throws SQLException {
// 1.insert sql 执行
PreparedStatement ps = (PreparedStatement) statement;
ps.execute();
int rows = ps.getUpdateCount();
// 2.获取当前MS 配置的KeyGenerator,并执行回填操作
Object parameterObject = boundSql.getParameterObject();
KeyGenerator keyGenerator = mappedStatement.getKeyGenerator();
keyGenerator.processAfter(executor, mappedStatement, ps, parameterObject);
return rows;
}
其次,主键生成分为auto 或者人工指定(包括sequence),useGeneratedKeys做了两种适配。
1.通过Jdbc接口查询自增记录并回填,参考
public void processBatch(MappedStatement ms, Statement stmt, List