Insight mybatis insert useGeneratedKeys

有这么一个场景:

使用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

2.人工指定的主键回填,参考:SelectKeyGenerator。


总结:

主键回填原来是这样的,豁然开朗。JDBC 接口需要认真读一读。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tt50335971/article/details/53487260
文章标签: mybatis useGeneratedKeys
个人分类: 读书笔记
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭