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

    你可能感兴趣的文章
    mysql Timestamp时间隔了8小时
    查看>>
    Mysql tinyint(1)与tinyint(4)的区别
    查看>>
    MySQL Troubleshoting:Waiting on query cache mutex
    查看>>
    mysql union orderby 无效
    查看>>
    mysql v$session_Oracle 进程查看v$session
    查看>>
    mysql where中如何判断不为空
    查看>>
    MySQL Workbench 使用手册:从入门到精通
    查看>>
    MySQL Workbench 数据库建模详解:从设计到实践
    查看>>
    MySQL Workbench 数据建模全解析:从基础到实践
    查看>>
    mysql workbench6.3.5_MySQL Workbench
    查看>>
    MySQL Workbench安装教程以及菜单汉化
    查看>>
    MySQL Xtrabackup 安装、备份、恢复
    查看>>
    mysql [Err] 1436 - Thread stack overrun: 129464 bytes used of a 286720 byte stack, and 160000 bytes
    查看>>
    MySQL _ MySQL常用操作
    查看>>
    MySQL – 导出数据成csv
    查看>>
    MySQL —— 在CentOS9下安装MySQL
    查看>>
    MySQL —— 视图
    查看>>
    mysql 不区分大小写
    查看>>
    mysql 两列互转
    查看>>
    MySQL 中开启二进制日志(Binlog)
    查看>>