Mybatis之useGeneratedKeys和selectKey的基本用法与区别

一、useGeneratedKeys

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


	insert into tableName (colName) values (#{colVal,jdbcType=VARCHAR})

(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


	
		select currval('seq_name') from dual
	
    insert into tableName (colName) values (#{colVal,jdbcType=VARCHAR})

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

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)