博客
关于我
mybatisplus按某一字段查询的一个坑
阅读量:767 次
发布时间:2019-03-24

本文共 1990 字,大约阅读时间需要 6 分钟。

优化后的技术文章

baomidou.mybatisplus封装的方法按指定字段查询数据库时,返回的 List 只有长度,没有元素。此问题通常发生在查询条件不正确或者数据存储存在问题时。让我详细分析一下如何解决这一问题,并帮助你找到最优的查询方式。

问题描述

你的代码如下:

public List< String >      getObtainerList() {    List< CreditReportRecord >          creditReportRecords = this.baseMapper.selectList(            Wrappers.< CreditReportRecord >                .lambdaQuery()                .select(CreditReportRecord::getObtainName)        );    if (CollectionUtils.isEmpty(creditReportRecords)) {        return null;    }    return creditReportRecords.stream()        .map(CreditReportRecord::getObtainName)        .collect(Collectors.toList());}

此代码的目的是从数据库中获取一个叫做obtainName的字段的值。然而在调试过程中,creditReportRecords的长度是188,说明数据库中存在大量的记录。但是,当返回List时,返回的内容却是空的,这说明creditReportRecords中的getObtainName方法返回了null,从而引发NullPointerException错误。

原因分析

  • 字段存储问题:数据库中obtainName字段的值可能全部为null,导致creditReportRecords列表中存在大量null元素。
  • 查询条件不对:如果查询条件没有设置过滤,且数据库中该字段的值均为null,则会直接返回所有记录,包含了null,从而导致最终结果为空。
  • 解决方法

    为了避免NullPointerException错误发生,需要在查询时对字段进行过滤,排除null值的记录。以下是优化后的代码:

    public List< String >      getObtainerList() {    List< CreditReportRecord >          creditReportRecords = this.baseMapper.selectList(            Wrappers.< CreditReportRecord >                .lambdaQuery()                .select(CreditReportRecord::getObtainName)                .isNotNull(CreditReportRecord::getObtainName)        );    return !CollectionUtils.isEmpty(creditReportRecords)        ? creditReportRecords.stream()            .map(CreditReportRecord::getObtainName)            .filter(name -> name != null)            .collect(Collectors.toList())        : null;}

    优点分析:

  • 直接筛选:在lambdaQuery中直接使用isNotNull方法,确保只返回obtainName字段不为null的记录。这样可以减少后续处理的负担。
  • 去空处理:检查creditReportRecords是否为空,避免直接调用stream()方法。如果creditReportRecords为空,则直接返回null,减少不必要的计算。
  • 数据安全:通过filter(name -> name != null)方法进一步确保返回的值是有效的,避免在最高级调用中出现NullPointerException
  • 总结

    通过对查询条件进行优化,使用isNotNull方法对字段进行过滤,可以避免因为null值而导致的错误。同时,合理处理List为空的情况,可以提升代码的健壮性。当数据库中存在大量字段需要通过查询条件过滤时,可以通过逐步筛选,确保只返回有效数据,从而提高应用的运行效率。

    转载地址:http://lunkk.baihongyu.com/

    你可能感兴趣的文章
    Python 交互式数据可视化详解
    查看>>
    python语言有哪些优点和缺点_Python有哪些优缺点,你了解吗?
    查看>>
    Python 从入门到精通:30天速成教程到底有多狠?你能坚持下来吗?
    查看>>
    Python 从数据库中存储和检索密码的最安全方法
    查看>>
    Python语言及其应用 - 知识点遍历
    查看>>
    Python 优化提速的 8 个小技巧
    查看>>
    Python 余弦相似度与皮尔逊相关系数 计算
    查看>>
    python 使用execjs 报编码错误解决办法,UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xac in position 145: il
    查看>>
    python 使用filetype校验文件
    查看>>
    Python 使用flush函数将缓冲区数据立即写磁盘
    查看>>
    python 使用in判断不准确,in不好使
    查看>>
    Python 使用pandas 进行查询和统计详解
    查看>>
    Redis 配置文件redis.conf详细解释
    查看>>
    python网络爬虫(2)——scrapy框架的基础使用
    查看>>
    python网络爬虫实例教程试读_Python网络爬虫实战教程(全套完整版) - 学途无忧网 - 做技术的王者 - Powered By EduSoho...
    查看>>
    Python 使用哈希函数用于加密
    查看>>
    Python 依赖管理的革新——Poetry 深度解析
    查看>>
    python 保留精度及增加去除数字的千位分隔符(金额化数字)
    查看>>
    python 倒计时 9,8,7,。。。。。。0
    查看>>
    Python 入门开发学习笔记之数据的增删改查
    查看>>