mybatis返回map类型数据空值字段不显示

业务需求背景

为另一个系统提供接口查询数据,当数据为空时,该字段就直接不显示了,不符合对方的参数要求,现需要将所有字段进行展示。

解决方法一

对具体字段进行判断,为空则给默认值显示

(CASE WHEN a.end_time is null then '' ELSE a.end_time END) as "endDate"

也可以使用ifnull函数进行判断

IFNULL(a.end_time,'') as "endDate"
解决方法二
  • 修改Mybatis配置文件,在mybatis-config.xml文件中启用callSettersOnNulls组件
<setting name="callSettersOnNulls" value="true"/>
  • 如果是使用的springMVC+Mybatis的架构的话,需要在spring-mybatis.xml文件中添加指定的Mybatis的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD SQL MAP Config 3.1//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <settings>
    <setting name="callSettersOnNulls" value="true"/>
  </settings>
</configuration>

spring-mybatis.xml

<!-- spring和MyBatis完美整合,添加mybatis的配置映射文件 -->
  <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="configLocation" value="classpath:mybatis-configuration.xml"/>
    <!-- 自动扫描mapping.xml文件 -->
    <property name="mapperLocations" value="classpath:mapping/*.xml"></property>
  </bean>
解决方法三

查询结果类型,使用实体类接收,而不是map接收;(我没有使用这种方法,因为我的需求返回值类型为List<Map<String,Object>>,这样的返回类型无需二次处理,直接返回给调用者就行了。

总结对比

如果需要在值为空时,自定义显示值,显然是使用第一种方式比较好,但是缺点就是需要对每个修改的字段都做这样的判断;相比于方式一,方式二就更具有全局性,但是方式二不支持自定义的显示值,只会给为空的字段赋值为null;方式三的接收类型为实体类,方便于对象查询,而且字段为空时,可以进行自定义,需要在resultMap中,指定typeHandler即可。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值