本文主要是介绍Mybatis中使用selectKey标签得到新增数据的主键,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
应用场景
一般作为insert标签的子标签使用,用于获取新增数据的自增主键信息
selectKey属性介绍
属性 | 描述 |
---|---|
keyProperty | selectKey语句结果应该被设置的目标对象属性(java对象对应数据库主键的属性) |
resultType | 结果的类型。MyBatis 通常可以算出来,写上也没有问题 |
order | 可以被设置为 BEFORE 或 AFTER。如果设置为 BEFORE,会首先得到主键,并赋值给参数类型对象的keyProperty属性,然后再执行插入语句。如果设置为 AFTER,会先执行插入语句,然后执行selectKey得到主键 |
statementType | 和前面的相同,MyBatis 支持 STATEMENT ,PREPARED 和CALLABLE 语句的映射类型,分别代表 PreparedStatement 和CallableStatement 类型 |
注意:
(1)myBatis允许任何简单类型作为主键的类型,主要是整型、字符串等
(2)在mysql、sql server这样支持主键自增的数据库中,order属性设置为AFTER,才能得到正确的主键值;oracle数据库中,order属性需要设置为BEFORE,否则会报错
示例
<!--新增信息,并拿到新增数据的主键信息。新增数据,得到主键的外层写法没什么特别,跟普通的insert一样。只不过里面加了selectKey-->
<!--selectKey 会将 SELECT LAST_INSERT_ID()的结果放入到传入的model的主键里面,keyProperty 对应的model中的主键的属性名,这里是 user 中的id,因为它跟数据库的主键对应。order AFTER 表示 SELECT LAST_INSERT_ID() 在insert执行之后执行,多用与自增主键,BEFORE 表示 SELECT LAST_INSERT_ID() 在insert执行之前执行,这样的话就拿不到主键了,这种适合那种主键不是自增的类型-->
<insert id="insertAndgetkey" parameterType="com.soft.mybatis.model.User"><selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">SELECT LAST_INSERT_ID()</selectKey>insert into t_user (username,password,create_date) values(#{username},#{password},#{createDate})
</insert>
重点:
(1)Mybatis执行完插入语句后,自动将自增长值赋值给对象的指定属性id。因此,可通过使用对象指定属性的getter方法获取自动增长的返回值
(2)实际调用的插入方法的返回值,代表受影响的数据库记录行数,而不是自增主键的值
这篇关于Mybatis中使用selectKey标签得到新增数据的主键的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!