此文章发布于35
个月前,部分信息可能已经过时
,请自行斟酌确认。
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
中,如果没有设置就不构造条件。
使用 Kotlin
的 with
和 let
结合起来实现上面的需求代码可以写成这样:
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
改写成其它名称如 i
、q
等都可以,主要是短~
FaultRepair::date 这种代码 mybatis plus 会报错,Didn't start with 'is', 'get' or 'set'. 老哥你是怎么解决这个问题的?
懂了,是 KtQueryWrapper 这个类的原因,这个类支持 Kt 的写法