Mybatis如何获取生成的主键呢?
下文笔者讲述Mybatis插入表后---获取生成主键的方法分享,如下所示
mybatis获取生成主键 我们需从MySQL和Oracle数据库上,进行不同的对待 如下例所示
Mybatis获取MySQL数据库生成的主键
<!-- useGeneratedKeys 设置为"true" 说明MyBatis要获取由数据库自动生成的主键 keyColumn指定数据库主键 keyProperty指定 Java 实体类中对应的主键字段 --> <insert id="insertUser" useGeneratedKeys="true" keyProperty="userId" > insert into user( user_name, userage, create_time) values(#{userName}, #{userage} , #{createTime, jdbcType= TIMESTAMP}) </insert> parameterType也可不写 Mybatis可自动推断出传入的数据类型
Oracle获取生成的主键
由于Oracle数据库,没有提供主键自增的功能 而是使用序列的方式获取自增主键 所以我们不能采用selectKey的方式获取主键,那么Oracle该如何获取主键呢?下文将一一道来,如下所示 <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, userage, create_time) values(#{userId},#{userName}, #{userage} , #{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方式主键,需注意以下操作 1.order:AFTER 2.获取递增主键值:SELECT LAST_INSERT_ID()
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。