MybatisPlus只取一条记录的两种方法实现

 更新时间:2025年07月29日 10:10:00   作者:杰肥啊  
本文介绍了MyBatis-Plus2.x和3.x版本在IService接口获取单条记录的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

不管是用MP2.X版本的还是MP3.X版本的小伙伴都会发现,在其IService接口中 并没有一个可以直接获取一条记录的方法。

MP2.x提供selectOne方法

@Override
public T selectOne(Wrapper<T> wrapper){
    return SqlHelper.getObject(baseMapper.selectList(wrapper));
}

查询多条记录,如果存在则返回List.get(0)位置上的数据。

MP3.x提供getOne方法

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

getOne方法只不过是在2.x的selectOne方法上多了一个布尔值,意思就是如果为true,则就是查询多条记录就会抛异常,如果为false,则查询多条记录后,取get(0)第一个位置记录返回。

不难看出,不管是selectOne还是getOne 底层调用的是selectList,有些人会说了,正常情况下,自己调用selectOne的数据,基本也是唯一。 但是在有些情况下,通过selectOne调用再由selectList的一些sql获取到的结果其实是多条甚至是成百上千条(有时候真的会遇到),可是你只会看到第一条数据。虽然说业务上并不会影响你们,但是你想过没有,如果稍有不慎你的sql查询的结果在数据库里是10000条,而这个查询经常被调用,也就是说10000条数据返回被加载在内存,然后就给了你一条,你是爽了,服务器有负担了。所以我们需要一个在sql语句阶段就能限制查询一条的结果的东西,那毋庸置疑就是LIMIT 1,那如何使用LIMIT 1 有以下两种常用写法。

第一种写法

mapper.xml中写一个关于本次查询的sql ,尾部加上 limit 1

SELECT 
	colum1,colum2,colum3 
FROM 
	table1 
WHERE 
	条件 
LIMIT 1

这种写法有一个不好的地方在哪里呢,对于单表查询来说的话,不友善,几乎你条件一变,要么你用if标签,要么你就得再写一次sql语句。反正个人就觉得挺丑的。

第二种写法

在MP提供的 Wrapper接口的实现类中都存在一个 last方法 用来最后拼接一个sql片段,在这里我们加一个limit 1。

public Children last(boolean condition, String lastSql) {
        if (condition) {
            this.lastSql.setStringValue(" " + lastSql);
        }

        return this.typedThis;
}

日常开发的时候基本就这么写

2.x写法

xxService.selectOne(new EntityWrapper().eq().eq().last("limit 1"));

3.x写法

xxService.selectOne(new QueryWrapper().eq().eq().last("limit 1"));

但是这也有一个挺恶心人的地方,就是这last放这 加上 limit 1 还是魔法值,挺难看的。所以可以变成以下封装。

你创建Service接口的时候一定会集成MP中的IService接口,所以就在这里利用java 8的新特性(接口的默认实现方法)来完成封装.

这里的xxx指的是你业务中的某个实体类,懂的都懂。

2.x写法

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

3.x写法

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

这样,你就可以将代码中的selectOne方法 无缝替换了。

到此这篇关于MybatisPlus如何只取一条记录的文章就介绍到这了,更多相关MybatisPlus只取一条记录内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spinrg WebFlux中Cookie的读写的示例

    Spinrg WebFlux中Cookie的读写的示例

    这篇文章主要介绍了Spinrg WebFlux中Cookie的读写的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Hadoop上Data Locality的详解

    Hadoop上Data Locality的详解

    这篇文章主要介绍了 Hadoop上Data Locality的详解的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下
    2017-10-10
  • 教你怎么用Java操作Redis

    教你怎么用Java操作Redis

    今天带大家来学习怎么用Java操作Redis,文中有非常详细的介绍,对正在学习java的小伙伴们有很好的帮助,建议有redis基础并熟悉redis的基本数据类型命令的小伙伴学习,需要的朋友可以参考下
    2021-05-05
  • Mybatis-plus中QueryWrapper的多种用法小结

    Mybatis-plus中QueryWrapper的多种用法小结

    本文主要介绍了Mybatis-plus中QueryWrapper的多种用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Java BigDecimal除法精度和格式化输出方式

    Java BigDecimal除法精度和格式化输出方式

    这篇文章主要介绍了Java BigDecimal除法精度和格式化输出方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • spring mvc url匹配禁用后缀访问操作

    spring mvc url匹配禁用后缀访问操作

    这篇文章主要介绍了spring mvc url匹配禁用后缀访问操作,具有很好的参考价值,希望对大家有所帮助。以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家
    2021-07-07
  • Spring Hystrix熔断报警原理图例解析

    Spring Hystrix熔断报警原理图例解析

    这篇文章主要介绍了Spring Hystrix熔断报警原理图例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • java代码实现俄罗斯方块

    java代码实现俄罗斯方块

    这篇文章主要为大家详细介绍了java代码实现俄罗斯方块,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • MyBatis Mapper.xml核心属性示例详解

    MyBatis Mapper.xml核心属性示例详解

    文章详解MyBatis Mapper.xml中statement标签的核心属性,涵盖SQL映射、执行控制、缓存管理及动态SQL,强调灵活配置对开发效率和系统性能的重要性,感兴趣的朋友一起看看吧
    2025-07-07
  • AsyncHttpClient的ConnectionSemaphore方法源码流程解读

    AsyncHttpClient的ConnectionSemaphore方法源码流程解读

    这篇文章主要为大家介绍了AsyncHttpClient的ConnectionSemaphore方法源码流程解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12

最新评论