MyBatis插入数据,返回新增数据的ID

MyBatis插入数据,返回新增数据的ID

mybatis、springboot2、MySQL、xml

其实有一些低代码平台生成的代码里本身就有这部分内容,不过不一定实时都能有好用的工具可以用,这是先前的一个疑问点,特此记录以备它用。

自增主键,插入数据,获取自增主键值

mybatis为我们提供了一个方法,能够插入数据时获取自动生成的值,并且把取的值赋值给实体类的某一属性。要求主键必须自增。

<insert id = "insert" useGeneratedKeys = "true" keyProperty = "id">
    insert ...
</insert>
  • useGeneratedKeys = true  //是否返回自增主键值
  • keyProperty = “xxx”  //将值赋给哪个属性,这个属性是方法参数中的,通过插入对象entity.getId()可以得到

主键非自增,获取主键值

selectKey after示例:查询最后一次添加的主键:

<insert id = "insertEmp">
    <selectKey resultType = "integer" order = "AFTER" keyProperty = "eid" >
        select last_insert_id()    //查询最后一次添加的主键,mysql函数
    </selectKey>
    insert into dept(id,deptname) values(#{id},#{deptname})
</insert>

selectKey before示例:假设Id不是自增长,我们希望在insert之前获取mysql的UUID添加到数据表作为主键Id:

<insert id = "insertDept">
    <selectKey resultType = "string" order = "BEFORE" keyProperty = "id">
        select uuid() as id
    </selectKey>
    insert into dept(id,name) values(#{id},#{name})
</insert>

selectKey属性说明:

  • resultType:返回类型,必填
  • order:两个值,必填:1、BEFORE 在添加之前查询 2、AFTER 在添加之后查询  //这两个都是全大写
  • keyProperty:将取值赋值给方法参数,实体类作参数,会赋值给实体对象的这个属性,必填
  • keyColumn:对应表的列名

插入数据时,返回多个值

赋值规则:keyProperty和keColumn的列数相对应:1对1,2对2 …

<insert id="xxx">
    <selectKey resultType="com.entity.Dept" order="BEFORE" keyProperty="id,name" keyColumn="cid,cname">
        select cid,cname from Category limit 1;
    </selectKey>
    insert into dept(id,name) values (#{id},#{name})
</insert>
<!-- 从Category中查询出cid,cname 赋值在方法参数中,然后添加到dept表 -->

感觉这里,好像是 1查多值填进入参对象,2对象值再次入库?没有验证能不能行,用到了再来验证修正吧。

本文参考优快云文章

声明:本文使用八爪鱼rpa工具从gitee自动搬运本人原创(或摘录,会备注出处)博客,如版式错乱请评论私信,如情况紧急或久未回复请致邮 xkm.0jiejie0@qq.com 并备注原委;引用本人笔记的链接正常情况下均可访问,如打不开请查看该链接末尾的笔记标题(右击链接文本,点击 复制链接地址,在文本编辑工具粘贴查看,也可在搜索框粘贴后直接编辑然后搜索),在本人博客手动搜索该标题即可;如遇任何问题,或有更佳方案,欢迎与我沟通!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值