MybatisPlus 只取一条记录

建议再使用Mapper的selectOne()方法时需要确保查询结果不能有多条,不然会报以下错误:
在这里插入图片描述
而使用IService的getOne(Wrapper queryWrapper),同样存在这样的问题;
如果希望他在获取到多条数据的时候只取第一条那应该使用 T getOne(Wrapper queryWrapper, boolean throwEx),throwEx为true时获取到多条报错,为false时只取第一条

public T getOne(Wrapper<T> queryWrapper, boolean throwEx) {
        return throwEx ? this.baseMapper.selectOne(queryWrapper) : SqlHelper.getObject(this.log, this.baseMapper.selectList(queryWrapper));
    }

不过这样做有个弊端,就是当数据异常的时候,可能查询了多条数据(虽然最后只给你返回了一条),但这样可能会使服务器承担额外的负担,最好还是在查询的后面添加limit 1。
但这样的话每次都要在查询条件后面拼接limit 1 有点麻烦
受大佬启发,发现可以在service中写一个默认方法

public interface xxxService extends IService<xxx>{
    /**
     * 仅有一条数据
     * @param wrapper
     * @return
     */
    default xxx getOnly(QueryWrapper<xxx> wrapper){
        wrapper.last("limit 1");
        return this.selectOne(wrapper);
    };
}

https://blog.csdn.net/javaboyweng/article/details/114143684