Insight mybatis insert useGeneratedKeys

原创 2016年12月06日 16:02:10

有这么一个场景:

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

Mybatis 配置文件 useGeneratedKeys 参数只针对 insert 语句生效,默认为 false。当设置为 true 时,表示如果插入的表以自增列为主键,则允许 JDBC 支持自动生...
  • guankle
  • guankle
  • 2017-07-01 13:38:15
  • 2970

mybatis useGeneratedKeys = "true"

keyProperty = "表字段中对应bean的属性"
  • m18500961204
  • m18500961204
  • 2017-06-10 14:33:04
  • 685

问题一20150509——mybatis的配置文件useGeneratedKeys属性(报java.lang.ArrayIndexOutOfBoundsException)

在mybatis配置文件中的insert语句如下时 insert into t_bookmark (BOOKMARK_ID, BOOKMARK_NAME, USER_ID, ...
  • zhuhao717
  • zhuhao717
  • 2015-05-09 16:19:32
  • 2065

mybatis 大坑之 useGeneratedKeys 返回值不是id,而是0跟1

useGeneratedKeys="true" keyProperty="id" 打了断点一路追到底层,发现真tmd返回0跟1,后斜眼一看object的id改变了,妈的好神奇。...
  • a5601564
  • a5601564
  • 2017-09-12 15:45:50
  • 1002

mybatis 中哪些数据库支持 useGeneratedKeys="true"

一般我们都会使用 id自动生成   "insertPrivilege" parameterType="Privilege" keyProperty="id"  useGeneratedK...
  • sinat_30474567
  • sinat_30474567
  • 2017-07-17 11:34:42
  • 929

MyBatis获取插入记录的自增长字段值

第一步:     在Mybatis Mapper文件中添加属性“useGeneratedKeys”和“keyProperty”,其中keyProperty是Java对象的属性名! ...
  • hellostory
  • hellostory
  • 2011-09-19 15:38:02
  • 51127

MyBatis Mapper3接口大全

Mapper3接口有两种形式,一种是提供了一个方法的接口。还有一种是不提供方法,但是继承了多个单方法的接口,一般是某类方法的集合。 例如SelectMapper是一个单方法的接口,BaseSel...
  • wtopps
  • wtopps
  • 2017-04-18 21:48:10
  • 4064

MyBatis的INSERT操作

一、前言                                      数据库操作怎能少了INSERT操作呢?下面记录MyBatis关于INSERT操作的笔记,以便日后查阅。   二...
  • qq309414557
  • qq309414557
  • 2015-08-18 16:02:40
  • 11462

mybatis做insert操作的时候 怎么才能返回插入的那条数据的id?

1、useGeneratedKeys=”true” 可以获取自增长的ID 只支持具有自增长方式的那种数据库(mysql, mssql 等 但 oracle 就不支持了 ) 所以可以使用selectKe...
  • RAPIER512
  • RAPIER512
  • 2016-04-20 10:39:32
  • 10155

Mybatis generator 自动生成代码时 ,insert如何返回主键值

如果要让generator自动添加该功能,可以如下配置:                        enableCountByExample="false" enableUpdate...
  • xyw591238
  • xyw591238
  • 2016-06-05 11:19:15
  • 5627
收藏助手
不良信息举报
您举报文章:Insight mybatis insert useGeneratedKeys
举报原因:
原因补充:

(最多只允许输入30个字)