RuoYi -- Mapper实现主键回填

本文介绍了在RuoYi框架中如何在Mapper中实现主键回填,以解决新增数据后需要操作新对象的需求。文章详细讲解了一种常用的实现方法,以及该方法在数据库数据新增时的应用。此外,还探讨了其他如Controller和ServiceImpl中的处理方式及其潜在的冗余和错误处理问题。

前言

  • 记录时间:2022.5.25
  • 内容:
    • 在Mapper中实现主键回填的方式。
    • 其他我已知方式的弊端。
  • 备注:
    • 主键有很多方式可以实现主键回填。就像是想实现一个视频动画效果,可以通过不同软件甚至是同一软件的不同方式去实现(所谓掌握好前行方向和行走工具,即条条大路通罗马~
    • 这里记录一下参考其他人的写法之后,我自己个人比较常用的一种。

1 实现代码

这里写了两种方法,取其一即可。

  1. 关键代码是useGeneratedKeys="true" keyProperty="id"
  2. 关键代码是<selectKey></selectKey>
<insert id="addPxCourseClass" parameterType="PxCourseClass" useGeneratedKeys="true" keyProperty="id">
    <!--通过mybatis框架提供的selectKey标签获得自增产生的ID值-->
    <selectKey keyProperty="id" resultType="java.lang.Long" order="AFTER">
        SELECT LAST_INSERT_ID()
    </selectKey>
    insert into ...
</insert>

这里实现的是在新增完这条数据之后,原本的对象即有了id。

可以理解成:进行了这一条insert操作,查询的参数对象同时被迫进行了一条把id填入自己的操作。

2 应用场景

  • 对数据库的数据进行新增的操作时,默认返回的是新增操作的结果,0是失败1是成功。

  • 但我们往往需要在新增一个对象数据之后,对新增后的这个数据进行操作。

  • 如何定位到这个新增的数据对象呢?那除了通过已知属性数据去再次查询出这个对象之外,也就是通过id去定位,这时候就需要用到主键回填了。

3 其他方法

① Controller

  • 正如应用场景里所说的通过已知属性数据去再次查询出这个对象。
    PxCourseClass pxClass = new PxCourseClass();
    pxClass.setName("体育课");
    PxCourseClass res = pxCourseClassService.selectCourseClass(pxClass);
  • 可以单独写一个方法,也可以调用查询结果为数组对象的方法,然后取得第0个值。
    PxCourseClass pxClass = new PxCourseClass();
    pxClass.setName("体育课");
    List<PxCourseClass> pxClassList = pxCourseClassService.selectCourseClassList(pxClass);
    PxCourseClass res = pxClassList.get(0);

② ServiceImpl

  • 直接单独写一个通过已知属性数据取查询出一个对象的方法。(上同)

  • 也可以在serviceImpl里查询时调用查询结果为数组对象的方法,然后取得第0个值。(上同)

  • 弊端: 单独写一个方法,意味着Mapper里需要新增一个和selectList除了返回参数之外,几乎一模一样的方法模块,就有些冗余了。

  • 弊端: 如果通过已知属性数据无法查到结果,那么null值是无法get(0)得到第0个对象的,所以需要再加一个是否为null的判断,如果是则人工去返回一个0。这时候如果项目比较大,而返回的报错只是告知失败,就有些难知道出错点在哪,debug会耗时更久一些。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值