MyBatis-Plus + Kotlin 强强组合写出简洁优雅代码

此文章发布于 24 个月前,部分信息可能已经过时,请自行斟酌确认。

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

Kotlin 简化字段名

条件构造器中不推荐对字段名进行硬编码,在 Java 中可使用 LambdaQueryWrapper,列名就可以使用类名::属性名来书写,但每个条件都要写一次类名也好难受,而在 Kotlin 中可借助强大的 let、also、with、run、apply 等语法来简化编写。

    /**
     * 根据组织 id 获取用户列表
     * @author xinggang
     * @create 2022-03-01
     * @param orgId 组织id
     * @return
     */
    override fun getUserByOrgId(orgId: String): List<SysUser> {
        val list = SysUser().let {
            val query = KtQueryWrapper(it)
            query.eq(it::orgFrameGuid, orgId)
            query.isNull(it::sealUser)
            this.list(query)
        }

        return list
    }

Kotlin 简化拼接前端查询参数

前端表单列表页面一般会提供很多查询条件,而这些条件都是可选的,后端接收到参数后需要判断用户是否设置了查询条件,如果设置了就拼接到 mp查询构造器 QueryWrapper 中,如果没有设置就不构造条件。

使用 Kotlinwithlet 结合起来实现上面的需求代码可以写成这样:

override fun page(param: FaultRepairParam): PageResult<FaultRepair> {

      val queryWrapper = KtQueryWrapper(FaultRepair())

      with(param) {

          //只要不是null就参与,空串也会参与(可配置前端将空串的参数去掉:date: dateValue || undefined)
          date?.let { queryWrapper.eq(FaultRepair::date, it) }

          //不是null/空串/空格时才参与条件,方法1
          ObjectUtil.defaultIfBlank(billNo, null)?.let { queryWrapper.eq(FaultRepair::billNo, it) }

          //不是null/空串/空格时才参与条件,方法2
          if (ObjectUtil.isNotEmpty(billNo)) queryWrapper.eq(FaultRepair::billNo, billNo)
      }

      return PageResult(this.page(PageFactory.defaultPage(), queryWrapper))
  }

上面的代码字段名没有使用文章最开始的简化方法,这里完全可以使用上,只是这时两个 it 就会重名,解决方法是使用命名的变量,将 it 改写成其它名称如 iq 等都可以,主要是短~

未完待续~

最后修改:2022 年 03 月 02 日 10 : 23 PM
如果觉得我的文章对你有用,请随意赞赏

2 条评论

  1. Yuan

    FaultRepair::date 这种代码 mybatis plus 会报错,Didn't start with 'is', 'get' or 'set'. 老哥你是怎么解决这个问题的?

    1. Yuan
      @Yuan

      懂了,是 KtQueryWrapper 这个类的原因,这个类支持 Kt 的写法

发表评论