Insight mybatis insert useGeneratedKeys
2016-12-06 16:02
429 查看
使用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 接口需要认真读一读。相关文章推荐
- MyBatis(3.2.3) - Mapped statements: The INSERT statement, Autogenerated keys
- Mybatis自动生成key值(selectKey和useGeneratedKeys)
- Mybatis插入语句useGeneratedKeys="true"的用法
- Mybatis自动生成key值(selectKey和useGeneratedKeys)
- mybatis新增时返回主键id,useGeneratedKeys的用法
- mysql数据库插入数据获取自增主键的三种方式(jdbc PreparedStatement方式、mybatis useGeneratedKeys方式、mybatis selectKey方式)
- Mybatis插入时返回自增主键(selectKey和useGeneratedKeys)
- mybatis 中哪些数据库支持 useGeneratedKeys="true"
- mybatis useGeneratedKeys = "true"
- Mybatis 配置文件 useGeneratedKeys 参数
- MyBatis自动生成id useGeneratedKeys
- 问题一20150509——mybatis的配置文件useGeneratedKeys属性(报java.lang.ArrayIndexOutOfBoundsException)
- mybatis中,<insert>标签中useGeneratedKeys和keyColumn作用
- mybatis 数据库表中外键关系存在时 useGeneratedKeys="true" keyProperty="id"
- MyBatis之主键自增——useGeneratedKeys
- mybatis 大坑之 useGeneratedKeys 返回值不是id,而是0跟1
- Mybatis自动生成key值(selectKey和useGeneratedKeys)
- Mybatis利用useGeneratedKeys返回最新插入记录的id Parameter 'id' not found. Available
- mybatis 中哪些数据库支持 useGeneratedKeys="true"
- Mybatis插入语句useGeneratedKeys="true"的用法