博客
关于我
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/

    你可能感兴趣的文章
    PHP大数组循环-避免产生Notice或者是Warning
    查看>>
    PHP大数组过滤元素、修改元素性能分析
    查看>>
    PHP大文件切片下载代码
    查看>>
    PHP如何下载远程文件到指定目录
    查看>>
    php如何优化压缩的图片
    查看>>
    php如何做表格,新手怎么制作表格
    查看>>
    RabbitMQ高级特性
    查看>>
    php如何定义的数位置,php如何实现不借助IDE快速定位行数或者方法定义的文件和位置...
    查看>>
    RabbitMQ集群 - 普通集群搭建、宕机情况
    查看>>
    php如何正确的获得文件的后缀名
    查看>>
    PHP如何生成唯一的数字ID
    查看>>
    PHP如何获取当前页面的最后修改时间
    查看>>
    PHP如何读取json数据
    查看>>
    PHP字符串
    查看>>
    PHP字符串递增
    查看>>
    php学习之基础语法
    查看>>
    RabbitMQ集群 - 仲裁队列、Raft协议(最详细的选举流程)
    查看>>
    PHP学习总结(11)——PHP入门篇之WAMPServer多站点配置
    查看>>
    PHP学习总结(12)——PHP入门篇之变量
    查看>>
    PHP学习总结(13)——PHP入门篇之常量
    查看>>