Mybatis如何获取生成的主键呢?
下文笔者讲述Mybatis获取生成主键的方法及示例分享,如下所示
Mybatis获取生成主键的方法
mybatis中useGeneratedKeys设置为true,然后获取主键
mybatis获取主键自增值
MySQL
<!-- useGeneratedKeys 设置为"true" 指MyBatis 要获取由数据库自动生成的主键 keyColumn指定数据库主键 keyProperty指定 Java 实体类中对应的主键字段 --> <insert id="insertUser" useGeneratedKeys="true" keyProperty="userId" > insert into user( user_name, user_password, create_time) values(#{userName}, #{userPassword} , #{createTime, jdbcType= TIMESTAMP}) </insert> parameterType 可不写 Mybatis可以推断出传入的数据类型 如果想要访问主键 那么parameterType 应当是java实体或Map 这样数据在插入之后可通过java实体或Map来获取主键值
不支持主键自增的数据库(Oracle)
Oracle数据库 未提供主键自增的功能 而使用序列的方式获取自增主键 可使用selectKey标签来获取主键的值 这种方式不仅适用于不提供主键自增功能的数据库 也适用于提供主键自增功能的数据库<selectKey>标签一般的用法 <insert id="insertUser" > <selectKey keyColumn="id" resultType="long" keyProperty="userId" order="BEFORE"> SELECT USER_ID.nextval as id from dual </selectKey> insert into user( user_id,user_name, user_password, create_time) values(#{userId},#{userName}, #{userPassword} , #{createTime, jdbcType= TIMESTAMP}) </insert>
相关属性说明
属性 | 备注 |
keyProperty | selectKey 语句结果应该被设置的目标属性。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表 |
keyColumn | 匹配属性的返回结果集中的列名称。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表 |
resultType | 结果的类型,MyBatis 通常可以推算出来。MyBatis 允许任何简单类型用作主键的类型,包括字符串。如果希望作用于多个生成的列,则可以使用一个包含期望属性的 Object 或一个 Map |
order | 值可为BEFORE 或 AFTER。如果是 BEFORE,那么它会先执行selectKey设置 keyProperty 然后执行插入语句。如果为AFTER则相反 |
statementType | 使用何种语句类型,默认PREPARED。有STATEMENT,PREPARED 和 CALLABLE 语句的映射类型。 此时会将Oracle生成的主键值赋予userId变量。这个userId 就是USER对象的属性,这样就可以将生成的主键值返回了 如果仅仅是在insert语句中使用但是不返回,此时keyProperty=“任意自定义变量名 resultType 可以不写。Oracle 数据库中的值要设置为 BEFORE ,这是因为 Oracle中需要先从序列获取值,然后将值作为主键插入到数据库中 |
注意事项: Mysql使用selectKey的方式获取主键 order :AFTER 获取递增主键值 :SELECT LAST_INSERT_ID()
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。