Mybatis 参数 useGeneratedKeys ,keyColumn,keyProperty作用和用法

博客主要介绍了MyBatis中useGeneratedKeys参数的用法。在使用MyBatis插入数据时,若需获取数据库生成的记录主键,可配置useGeneratedKeys、keyColumn和keyProperty参数,插入完成后MyBatis会将主键刷新到实体类中,避免额外查询。还给出小例子辅助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:
深入浅出mybatis之useGeneratedKeys参数用法
Mybatis 配置文件 useGeneratedKeys 参数
mybatis中useGeneratedKeys和keyProperty的作用

在使用mybatis时,有些情况下需要在插入后获得刚才数据库为我们生成的那条记录的主键,但是如果我们不告诉数据库:“我插入这条信息后你把刚才插入的那条记录的主键告诉我,我有用!”,那么数据库是不会给我们返回的。有的人可能说,我可以一会再把它查出来啊~,这样确实可以,但是有些多此一举的味道,而且还要再写一个方法来查询。像这样又插入又能得到我们想要的信息,一举两得。

注意:
并不是返回值是主键,而是将主键的值写入到我们配置的keyProperty,因为我们的主键一般是数据库自己生成的,也就是说我们在向数据库中插入之前,我们自己定义实体类实例对应的主键属性一般是null或者不可用的(因为没插入之前你不可能知道数据库会给你生成什么样的主键),在配置了useGeneratedKeys ,keyColumn,keyProperty参数后,插入完成之后mybatis会帮你将生成的主键刷新到我们的实体类中,之后就可以直接使用了。
下面是一个小例子,帮助理解

  • mapper.xml
<!-- useGeneratedKeys 插入后返回主键 keyColumn指定数据库主键 
keyProperty指定在Java 实体类中对应的主键 -->
  <insert id="inertPojo" useGeneratedKeys="true" keyColumn="pojo_id" keyProperty="Pojo">
    <!-- 或者直接不显示的写key(主键) -->
    insert into tb_pojo(key, param1, param2, ...)
    values
    (null, #{param1}, #{param2}, ...)
  </insert>

对应的接口

public interface PojoDao {

    /**
     * 新增Pojo
     * @param pojo
     * @return 插入的记录的主键
     */
    int inertPojo(Pojo pojo);
}

对应的插入逻辑

	//Pojo的key我们并没有设定
	Pojo ourPojo = new Pojo(param1, param2, ....);
	//此时ourPojo的主键我们还是没法用的,因为数据库还没生成呢~
	int effectNums = pojoDao.insertPojo(ourPojo);
	//此时ourPojo的主键已经是可以用的了,默认的返回值是Sql语句影响的记录的条数

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值