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

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值