Mybatis 中的主键返回

2022-10-28 08:45:09 浏览数 (1)

XML方式

返回自增主键

代码语言:javascript复制
<insert id="insert1" useGeneratedKeys="true" keyProperty="id">
    insert into sys_user(user_name,password,email,info,create_time)
    values(#{userName},#{password},#{email},#{info},#{createTime})
</insert>

使用useGeneratedKeys设置为true后 , MyBatis会使用JDBC的getGeneratedKeys方法取出由数据库内部生成的主键 . 获得主键值之后将其赋给keyProperty配置的 id 属性 . 当需要设置多个属性时 , 使用逗号隔开 , 这种情况下 还需要配置 keyColumn属性 , 按顺序指定数据库的列 , 这里列的值会和 keyProperty 配置的属性一一对应 . 由于要使用数据库返回的主键值 , 所以SQL上下两部分的列中去掉了 id 列和对于的 #{id} 属性

返回非自增主键

采用<selectKey>标签获取主键的值 , 这种方式对提供和不提供主键自增功能的数据库同样适用

代码语言:javascript复制
<insert id="insert2">
    insert into sys_user(user_name,password,email,info,create_time)
    values(#{userName},#{password},#{email},#{info},#{createTime})
    <selectKey resultType="int" keyProperty="id" order="AFTER">
        SELECT LAST_INSERT_ID()
    </selectKey>
</insert>

selectKey标签的 keyProperty和上面useGeneratedKeys的用法和含义一样 , 这里的resultType用于设置返回值类型. order 属性和数据库相关 , 在MYSQL 中 , order是AFTER , 因为当前及记录的主键值在insert语句执行成功之后才能拿到 , 而在ORACLE中 ,oder是BEFORE , 因为ORACLE需要先从序列取到值 , 再将其作为主键插入到数据库

0 人点赞