一、useGeneratedKeys

数据库本身具备主键自动增长的功能,才能使用useGeneratedKeys
oracle不支持true

<insert id="insert" useGeneratedKeys="true" keyProperty="idColName">insert into tableName (colName) values (#{colVal,jdbcType=VARCHAR})
</insert>

(insert and update only) This tells MyBatis to use the JDBC getGeneratedKeys method to retrieve keys generated internally by the database (e.g.auto increment fields in RDBMS like MySQL or SQL Server). Default: false
(仅插入和更新)这告诉MyBatis使用JDBC getGeneratedKeys方法来检索数据库内部生成的密钥(例如,RDBMS中的自动增量字段,例如MySQL或SQL Server)。默认值:false

二、selectKey

当数据库不支持useGeneratedKeys=“true” ,则使用selectKey,例如oracle

<insert id="insert" useGeneratedKeys="true" keyProperty="idColName"><selectKey keyColumn="colName" keyProperty="colParamName" order="AFTER" resultType="Long">select currval('seq_name') from dual</selectKey>insert into tableName (colName) values (#{colVal,jdbcType=VARCHAR})
</insert>

mysql有 last_insert_id() 这个方法,可用在<selectKey>标签中。

selectKey属性

属性名称 含义
keyProperty selectKey 语句的目标属性
resultType 结果的类型。MyBatis 通常可以计算出来,但是写上也没有问题。MyBatis 允许任何简单类型用作主键的类型,包括字符串。
order BEFORE 或 AFTER。如果设置为 BEFORE,那么它会首先查询主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后获取主键,这和 Oracle 数据库相似,可以在插入语句中嵌入序列调用。
statementType MyBatis 支持 STATEMENT ,PREPARED 和CALLABLE 语句的映射类型,分别代表PreparedStatement 和 CallableStatement 类型。

注意点
当高并发时,mysql的last_insert_id()的返回值可能是其他人正在操作的数据返回的id,保险操作是根据唯一索引重新查询数据。

Mybatis之useGeneratedKeys和selectKey的基本用法与区别相关推荐

  1. 复习下mybatis 中 useGeneratedKeys 和 keyProperty 含义

    今天突然碰到这个错误,让我复习下mybatis 中 useGeneratedKeys 和 keyProperty 含义 nested exception is org.apache.ibatis.ex ...

  2. @ini_get php,php中get_cfg_var()和ini_get()的用法及区别_php技巧_脚本之家

    本文实例讲述了php中get_cfg_var()和ini_get()的用法及区别.分享给大家供大家参考.具体分析如下: php里get_cfg_var()和ini_get()都是取得配置值的函数,当你 ...

  3. return true Java_[Java教程]js中return,return true,return false的用法及区别

    [Java教程]js中return,return true,return false的用法及区别 0 2015-11-16 23:00:03 1.语法及返回方式 ①返回控制与函数结果 语法为:retu ...

  4. 【Java学习笔记之二十九】Java中的equals和==的用法及区别

    Java中的"equals"和"=="的用法及区别 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String(&quo ...

  5. python ord()与chr()用法以及区别

    python ord()与chr()用法以及区别 原文:http://blog.csdn.net/yulock/article/details/52904035 ord()函数主要用来返回对应字符的a ...

  6. matlab ezplot fplot,【转】Matlab plot fplot ezplot用法与区别

    [转]Matlab plot fplot ezplot用法与区别 (2012-04-19 20:26:00) 标签: matlab fplot ezplot 数学函数 曲线 杂谈 函数plot 是绘制 ...

  7. TF:tensorflow框架中常用函数介绍—tf.Variable()和tf.get_variable()用法及其区别

    TF:tensorflow框架中常用函数介绍-tf.Variable()和tf.get_variable()用法及其区别 目录 tensorflow框架 tensorflow.Variable()函数 ...

  8. Spring中@Resource与@Autowired、@Qualifier的用法与区别

    Spring中@Resource与@Autowired.@Qualifier的用法与区别 1.@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法 ...

  9. break与continue的的用法以及区别

    /* break与continue的的用法以及区别 1. 当它们用在循环语句的循环体时,break用于立即退出本层循环,而continue仅仅结束本次循环(本次循环体内不执行 continue语句后的 ...

最新文章

  1. 学什么都不容易!学好一样更不容易!
  2. modbus通讯失败_技成周报38期 | SMART PLC Modbus通讯、组态、模拟量等常见问题
  3. 给书配代码-电力经济调度(4):有功与辅助服务联合经济调度
  4. oracle xe gentoo,Oracle在gentoo下安装
  5. 解决/mnt中有hgfs无共享文件
  6. python与机械教育初探_Python公开课-机械学习之手写识别
  7. StringBuffer类的常用方法
  8. Table变量和临时表区别
  9. Oracle查询优化改写技巧与案例总结三
  10. “舱驾融合”技术发展趋势分析
  11. QQ头像加口罩PHP,如何用人脸识别自动给头像添加口罩及护目镜
  12. rxjs ajax query,rxjs入门之ajax封装
  13. 基于linux2.6.30.4内核的DM9000网卡驱动编译成模块成功ping通
  14. POJ 1375 Intervals
  15. Unity材质快速复制
  16. 32位(x86)和64位(x64)
  17. centos7安装docker并配置daocloud
  18. java jtextfield不能输入_如限制JTextField的输入个数?
  19. error:2006D080:BIO routines:BIO_new_file:no such file
  20. VCE公司掌门人Chad Sakac称将在超融合市场上占据主动

热门文章

  1. php soap 手册,SoapClient::SoapClient
  2. 华为手表鸿蒙系统什么时候上市,打脸还是华为强,鸿蒙系统将Watch GT 2智能手表上市...
  3. Office 365 函数之Replace 函数的使用
  4. python酒店评论分析_手把手用Python网络爬虫带你爬取全国著名高校附近酒店评论...
  5. AJAX file uploads in Rails using attachment_fu and responds_to_parent 1
  6. 在delphi程序中实现QQ用户的Web登陆并获取个人信息
  7. A Tale from the Dark Side of The Moon
  8. 史上最全的亚马逊防关联技巧|跨境知道
  9. Linux之C++ socket通信编程
  10. 【数据库数据恢复】MySQL数据库误删除未备份的数据恢复案例