mybatis获取主键id

本文深入探讨了MyBatis框架中插入操作的实现细节,包括如何使用<insert>元素定义插入语句,以及如何利用<selectKey>元素进行自增ID的获取。通过具体代码示例,读者可以了解到如何将Java对象映射到数据库表,并掌握自增ID的正确处理方式。

<insert id="insert" parameterType="com.pinyougou.pojo.TbSpecification" >

<selectKey resultType="java.lang.Long" order="AFTER" keyProperty="id">
SELECT LAST_INSERT_ID() AS id
</selectKey>

insert into tb_specification (id, spec_name)
values (#{id,jdbcType=BIGINT}, #{specName,jdbcType=VARCHAR})

</insert>


 

MyBatis返回主键ID有以下几种方法: #### 方法一:使用`selectKey`标签 在配置文件中使用`<selectKey>`标签,该标签有几个重要属性: - `keyProperty`:设置为目标属性。 - `resultType`:设置返回值类型。 - `order`:值为`AFTER`或`BEFORE`,`AFTER`表示在 SQL 之后执行,`BEFORE`表示在 SQL 之前执行。 示例如下: ```xml <selectKey keyProperty="id" order="AFTER" resultType="期望的返回类型(依据主键)"> SELECT LAST_INSERT_ID() </selectKey> ``` 这里的`SELECT LAST_INSERT_ID()`用于获取最后插入记录的自增主键值。如果是 MySQL 数据库,这种方式很常用 [^3][^4][^5]。 #### 方法二:使用`useGeneratedKeys`属性 对于一些支持自动生成主键的数据库(如 MySQL、PostgreSQL 等),可以在`<insert>`标签中使用`useGeneratedKeys`和`keyProperty`属性。 以 PostgreSQL 为例,普通的 insert 语句如下: ```xml <insert id="insert" parameterType="com.xxx.xxx.xxDo"> insert into "table_name" (key, value) values (#{key,jdbcType=VARCHAR}, #{value,jdbcType=VARCHAR}) </insert> ``` 此时 Dao 接口的`public Integer insert(DatabaseObject do);`返回的`Integer`是收到改动的行数,插入成功时返回 1。若要返回主键,可以修改为: ```xml <insert id="insert" parameterType="com.xxx.xxx.xxDo" useGeneratedKeys="true" keyProperty="id"> insert into "table_name" (key, value) values (#{key,jdbcType=VARCHAR}, #{value,jdbcType=VARCHAR}) </insert> ``` `useGeneratedKeys`让 MyBatis 来分配主键 ID,`keyProperty`用于在主键名不是`id`时指定主键名。此时 MyBatis 会将分配的主键加入 insert 的传参`do`中,通过`do`自带的`getId`就可以返回主键了。在 server 层中可以这样使用: ```java public Integer insert(DatabaseObject xxDo) { if (MyBatisDao.insert(xxDo) > 0) { return xxDo.getId(); } else { return 0; } } ``` 这种方式对于支持自动生成主键的数据库非常方便 [^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值