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 接口需要认真读一读。

版权声明:本文为博主原创文章,未经博主允许不得转载。

搬砖中的小事之代码(四)--useGeneratedKeys的理解与使用

调试centerBank接口,业务实现类里面想要通过获取表格中主键id,来进行逻辑判断,从而进行更新; 直接撸代码–mapper.xml中的插入方法:...
  • tom_code
  • tom_code
  • 2017年04月07日 10:49
  • 472

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

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

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

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

MyBatis的INSERT操作

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

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

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

MyBatis+MySQL 返回插入的主键ID

需求:使用MyBatis往MySQL数据库中插入一条记录后,需要返回该条记录的自增主键值。 方法:在mapper中指定keyProperty属性,示例如下:Xml代码  insert id="inse...
  • dyllove98
  • dyllove98
  • 2013年04月29日 10:55
  • 22793

MyBatis在Oracle中插入数据并返回主键的问题解决

引言: 在MyBatis中,希望在Oracle中插入数据之时,同时返回主键值,而非插入的条数......
  • blueheart20
  • blueheart20
  • 2014年05月12日 17:50
  • 30104

mybatis的insert元素属性详解 及 在insert插入数据获取主键id的值

其属性如下:    parameterType ,入参的全限定类名或类型别名    keyColumn ,设置数据表自动生成的主键名。对特定数据库(如PostgreSQL),若自动生成的主...
  • a281246240
  • a281246240
  • 2016年12月05日 11:43
  • 6527

MyBatis_insert

  • 2017年04月22日 22:11
  • 4.57MB
  • 下载

MyBatis之insert——主键自增和自定义主键

一、实现描述:我们在写程序时,时常会遇到这样的问题:插入一条数据,但因有主键的存在,而有时候会报“违反唯一性约束”的错误,下面呢,我们就来利用MyBatis来解决这个问题。 二、此文使用的数据库为M...
  • joyksk
  • joyksk
  • 2017年08月06日 15:49
  • 608
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Insight mybatis insert useGeneratedKeys
举报原因:
原因补充:

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