场景解决之mybatis当中resultType= map时,因某个字段为null导致返回的map的key不存在怎么处理

1、场景:通过查询数据表将返回结果封装到map当中返回,因某个字段为null,导致map当中key丢失

<select id="queryMyBonus" parameterType="com.cn.entity.student" resultType= "map">SELECTb.projectName as "projectName",b.money as "money",b.yearMonthDay as "yearMonthDay",b.description as "description"FROMStudent b<where><if test='userId != null and userId != ""'>AND b.USERID = #{userId,jdbcType=VARCHAR}</if></where>order by b.YEARMONTHDAY desc, b.totalFlag desc, b.BONUSID asc</select>

注意上面的resultType= “map”,此时当查询结果为
在这里插入图片描述
返回的map结果为,丢失了description
在这里插入图片描述
2、解决方案

  1. 修改查询SQL:在查询SQL中使用数据库函数(如 IFNULL 或 COALESCE )来为可能为 null 的字段提供一个默认值。
  2. 使用实体类代替Map:如果可能,修改返回类型为一个实体类而不是 map ,这样即使字段值为 null ,也会在实体类中正确地表示出来。
  3. 配置MyBatis:在MyBatis的配置文件中设置 callSettersOnNulls 属性为 true 。这会使得MyBatis在处理结果集时,即使字段值为 null 也会调用映射对象的setter方法(对于 map 来说就是 put 方法),从而在 map 中包含这个键。在 mybatis-config.xml 中添加如下配置
<configuration><settings><!--  这个修改是全局的 --><setting name="callSettersOnNulls" value="true"/></settings>
</configuration>

如果是Spring Boot项目,可以在 application.properties 或 application.yml 中添加:
properties:

mybatis.configuration.call-setters-on-nulls=true

yaml:

mybatis:configuration:call-setters-on-nulls: true
  1. 自定义TypeHandler:创建一个实现 TypeHandler 接口的类,用于处理 null 值的情况。
/*** 自定义类型处理器,用于将数据库中的null值转换为空字符串* 这在避免空指针异常和统一数据处理逻辑方面非常有用*/
package com.cn.config;import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class EmptyStringIfNull implements TypeHandler<String> {/*** 设置参数值到PreparedStatement中* 本方法暂未实现,因为在这种情况下不需要特殊处理** @param ps          预编译的SQL语句对象* @param i           参数索引* @param parameter   参数值* @param jdbcType    JDBC类型* @throws SQLException 如果操作数据库时发生错误*/@Overridepublic void setParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {// 无需特殊处理,保留默认行为}/*** 从ResultSet中根据列名获取结果,并将null值转换为空字符串* 这是处理null值的关键方法** @param rs          结果集对象* @param columnName  列名* @return            字符串结果,如果数据库中的值为null,则返回空字符串* @throws SQLException 如果操作数据库时发生错误*/@Overridepublic String getResult(ResultSet rs, String columnName) throws SQLException {// 获取字符串值,如果为null,则返回空字符串return (rs.getString(columnName) == null) ? "" : rs.getString(columnName);}/*** 从ResultSet中根据列索引获取结果* 本方法未实现,因为当前逻辑不需要使用列索引获取结果** @param rs          结果集对象* @param columnIndex 列索引* @return            未使用,始终返回null* @throws SQLException 如果操作数据库时发生错误*/@Overridepublic String getResult(ResultSet rs, int columnIndex) throws SQLException {// 无需处理,返回nullreturn null;}/*** 从CallableStatement中根据列索引获取结果* 本方法未实现,因为当前逻辑不需要通过CallableStatement获取结果** @param cs          可调用语句对象* @param columnIndex 列索引* @return            未使用,始终返回null* @throws SQLException 如果操作数据库时发生错误*/@Overridepublic String getResult(CallableStatement cs, int columnIndex) throws SQLException {// 无需处理,返回nullreturn null;}
}

使用方式:
将select标签的resulttype=map 改成resultMap映射

 <!-- 查询信息 --><resultMap id="BonusResultMap" type="map"><result property="projectName" column="projectName"/><result property="money" column="money"/><result property="yearMonthDay" column="yearMonthDay"/><result property="description" column="description" typeHandler="com.cn.config.EmptyStringIfNull"/></resultMap>

上述配置 typeHandler=“com.cn.config.EmptyStringIfNull”
可以单个指定使用较为方便

结果验证:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/470133.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

客户案例 | 如何利用Ansys工具提供互联系统(以及系统的系统),从而使“软件定义汽车”成为可能

“我使用Ansys medini进行大量的分析类活动&#xff0c;因此&#xff0c;从危险分析和风险评估开始&#xff0c;我们就使用medini来开展工作。此外&#xff0c;我们也会在产品开发阶段使用该工具……比如当我们试图确定哪些类型的故障&#xff0c;以及哪些类型的条件会导致不必…

Stored procedures in PostgreSQL

select 存储过程&#xff0c;在现了解的情况&#xff0c;还是没有mysql,sqlserver等好写好用。 --postgreSQL 11.0 以下版本 create or replace FUNCTION procInsertSchool (pSchoolId Char(5),pSchoolName VarChar(100),pSchoolTelNo VarChar(8) ) RETURNS void language plp…

搭建监控系统Prometheus + Grafana

公司有个技术分享会&#xff0c;但是业务忙&#xff0c;没时间精心准备&#xff0c;所以就匆匆忙忙准备分享一下搭建&#xff08;捂脸哭&#xff09;。技术含量确实不多&#xff0c;但是分享的知识确实没问题。 以下是搭建过程&#xff1a; 一、讲解 Prometheus Prometheus 最…

字节跳动核心技术:TT推荐系统从0-1落地应用

⭕️以下就是字节跳动TT推荐系统0-1落地应用简单的描述&#xff0c;同时我还整理了其他不同大厂的项目案例拆解以及其他的AI产品项目&#xff0c;都已经脱敏了 ✅在这之前&#x1f236;一位90后产品女生用我分享的项目去面试&#xff0c;上周就已经拿下了一家大厂的offer&…

欧国联的规则,你都了解吗?

昨天威科姆主场2-1击败克劳利&#xff0c;客观来讲&#xff0c;威科姆的确也缺少很重要的球员&#xff0c;因此尽管罚丢了一个点球&#xff0c;但场面优势并不明显。好在有惊无险拿到3分晋级&#xff0c;避开了点球大战。 今天没有比赛&#xff0c;聊聊明天要猜的欧国联相关话…

Mysql 8迁移到达梦DM8遇到的报错

在实战迁移时&#xff0c;遇到两个报错。 一、列[tag]长度超出定义 在mysql中&#xff0c;tag字段的长度是varchar(20)&#xff0c;在迁移到DM8后&#xff0c;这个长度不够用了。怎么解决&#xff1f; 在迁移过程中&#xff0c;“指定对象”时&#xff0c;选择转换。 在“列映…

Ai创作新风标!仅需三步,利用ai工具免费制作抖音爆款的动物融合视频(含完整的步骤)

有位家人想要学习动物融合的视频,群里有人口述分享但是家人还是有点不是很明白。所以本篇就手把手把这个制作教程分享出来。 整体制作流程相对还是比较简单的,难度在于如何写提示词让画面按照预期的方式进行合并,这个就和昨天的烟火秀一样。后面我思考一下如何把这种调整提示词…

常见的噪声模型+图像中噪声模型的估计+常见的滤波方法(C++)

常见空间域噪声模型 1.1 高斯噪声 高斯噪声的概率密度函数表示为&#xff1a; 1.2 瑞利噪声 1.3 伽马噪声 1.4 指数噪声 1.5 均匀分布噪声 1.6 脉冲&#xff08;椒盐&#xff09;噪声 图像中噪声判别 对于上述六种噪声&#xff0c;椒盐噪声与其他噪声图像差别较大&#xf…

RAFT: Recurrent All-Pairs Field Transforms for Optical Flow用于光流估计的循环全对场变换

背景&#xff1a; 1.光流估计是一个长期存在的计算机视觉问题&#xff0c;对于理解视频内容至关重要。 2.光流估计面临的挑战包括快速移动的物体、遮挡、运动模糊和无纹理表面。 3.传统方法通常将光流估计视为一个手工优化问题&#xff0c;但这些方法在处理各种特殊情况时存…

大数据面试题--kafka夺命连环问(后10问)

目录 16、kafka是如何做到高效读写&#xff1f; 17、Kafka集群中数据的存储是按照什么方式存储的&#xff1f; 18、kafka中是如何快速定位到一个offset的。 19、简述kafka中的数据清理策略。 20、消费者组和分区数之间的关系是怎样的&#xff1f; 21、kafka如何知道哪个消…

【Android、IOS、Flutter、鸿蒙、ReactNative 】约束布局

Android XML 约束布局 参考 TextView居中 TextView 垂直居中并且靠右 TextView 宽高设置百分比 宽和高的比例 app:layout_constraintDimensionRatio"h,2:1" 表示子视图的宽高比为2:1&#xff0c;其中 h表示保持宽度不变&#xff0c;高度自动调整。 最大宽度 设…

【机器学习】平均绝对误差(MAE:Mean Absolute Error)

平均绝对误差 (Mean Absolute Error, MAE) 是一种衡量预测值与实际值之间平均差异的统计指标。它在机器学习、统计学等领域中广泛应用&#xff0c;用于评估模型的预测精度。与均方误差 (MSE) 或均方误差根 (RMSE) 不同&#xff0c;MAE 使用误差的绝对值&#xff0c;因此它在处理…

【Qt】在 Qt Creator 中使用图片资源方法(含素材网站推荐)

先准备图片资源 推荐一个好用的图标素材网站&#xff0c;有很多免费资源。 Ic, fluent, animal, dog, filled icon - Free download 其他辅助工具&#xff0c;类似 AI 抠图去背景&#xff0c;实测效果还行&#xff0c;但是非免费。 美图秀秀-在线一键抠图&#xff0c;无需P…

Dial-insight:利用高质量特定领域数据微调大型语言模型防止灾难性遗忘

摘要 大型语言模型&#xff08;LLM&#xff09;的性能很大程度上依赖于底层数据的质量&#xff0c;特别是在专业领域。在针对特定领域应用微调LLM时&#xff0c;一个常见的挑战是模型泛化能力的潜在下降。为了解决这些问题&#xff0c;我们提出了一种两阶段方法来构建提示词&a…

品融电商:新形势下电商平台如何助力品牌长期经营

品融电商&#xff1a;新形势下电商平台如何助力品牌长期经营 在过去几年中&#xff0c;随着内容电商的兴起&#xff0c;一批新兴品牌通过精准的内容种草和互动营销迅速打开市场&#xff0c;实现了从“0到1”的品牌起步阶段。比如&#xff0c;新品牌SIINSIIN通过小红书等内容电商…

Springboot整合Prometheus+grafana实现系统监控

前言 Prometheus是一个开源的服务监控系统和时序数据库&#xff0c;它提供了强大的功能和灵活的架构&#xff0c;是目前主流的监控和管理应用系统的工具。 而Grafana是一个开源的数据可视化工具&#xff0c;与Prometheus集成&#xff0c;就可以可视化地监控系统的各个指标。 …

运行WHTools批量启动游戏房间工具提示要安装.Net Framework3.5解决

确认电脑能正常上网 点击下载并安装此功能&#xff0c;开始安装.Net Framework 3.5 安装成功 成功启动WHTools

怎么监控员工电脑?分享5个监控员工电脑的绝佳方法(立竿见影!建议收藏!)

怎么监控员工电脑&#xff1f; 在企业管理中&#xff0c;缺乏行之有效的监控时&#xff0c;便会滋生一些不当行为便&#xff0c;如偷偷浏览与工作无关的网站、泄露公司机密信息、甚至进行非法操作等。 为了有效管理员工电脑&#xff0c;确保企业信息安全&#xff0c;学会合理合…

监控录音如何消除杂音?降低录音噪音的五个技巧

在日常生活和工作中&#xff0c;监控录音的清晰度对信息获取极为重要。然而&#xff0c;录音过程中常会遇到各种杂音干扰&#xff0c;这些干扰可能来自环境噪音、设备故障等多种因素。为了提高录音质量&#xff0c;采取有效的杂音消除技术是必不可少的。监控录音如何消除杂音&a…

红日靶机(七)笔记

VulnStack-红日靶机七 概述 在 VulnStack7 是由 5 台目标机器组成的三层网络环境&#xff0c;分别为 DMZ 区、第二层网络、第三层网络。涉及到的知识点也是有很多&#xff0c;redis未授权的利用、laravel的历史漏洞、docker逃逸、隧道、代理的搭建、通达OA系统的历史漏洞、ms…