MyBatis-Plus只查询固定条数记录

在使用MyBatis-Plus时有时候会碰到根据时间排序,只取最早或最晚一条记录的需求,这种需求其实只需在查询构造器最后加一个last()方法即可,方法里传入参数last(“limit 1”)。

这种方法可以实现上述需求,但是不得不写一个"limit 1",以后改需求查两个的话又需要改为"limit 2",而且这里写一个常量字符串感觉也怪怪的,基于此可以用两种方法代替。

方法一


使用常量代替,例如在代码中可以这样写

last(Constant.LIMIT_ONE)

方法二


自己建一个mybatis-plus查询构造器,继承LambdaQueryWrapper,实现代码如下:

@Component
public class StrengthenLambdaQueryWrapper<T> extends LambdaQueryWrapper<T> {

    /**
     * 只取一条记录
     * @param lambdaQueryWrapper
     * @return LambdaQueryWrapper
     */
    public LambdaQueryWrapper<T> limitOne(LambdaQueryWrapper<T> lambdaQueryWrapper){
        return lambdaQueryWrapper.last(Constant.LIMIT_ONE);
    }

}

在业务方法中使用

public void testLimitOne(String userName){
        StrengthenLambdaQueryWrapper<SysBizUser> sysBizUserStrengthenLambdaQueryWrapper = new StrengthenLambdaQueryWrapper<>();
        LambdaQueryWrapper<SysBizUser> lambdaQueryWrapper = sysBizUserStrengthenLambdaQueryWrapper
                .limitOne(sysBizUserStrengthenLambdaQueryWrapper)
                .eq(SysBizUser::getUserName, userName);
        SysBizUser sysBizUser = sysBizUserMapper.selectOne(lambdaQueryWrapper);
    }