Mybatis使用Map作为返回类型时,value值为空,字段被隐藏
问题描述
我们在项目中使用Mybatis进行查询数据的时候,根据场景需要返回值常常使用Map作为返回类型;
但是当数据库里面的值为空时,查询出来返回的Map对应的字段会被隐藏;
针对字段被隐藏的问题,进行如下的演示:
mapper接口
@Mapper
public interface SqlBaseMapper {
List<Map> selectMapList();
}
SqlBaseMapper.xml
测试结果:
[{TMPID=00003, ID=818020E3F66642308D9334F1B82A6F61, TEMPNAME=tmp测试数据3},
{TMPID=00001, ID=E74C9EC, TEMPNAME=xxkfz},
{TMPID=00006, ID=88640EF, TEMPNAME=temp测试数据3}]
可以看出,正因为temp_date数据库里值为空,返回的结果中该字段被隐藏了
解决方案
主要提供了以下几种解决办法:
- 在配置文件application.yml添加配置
mybatis:
configuration:
call-setters-on-nulls: true
- 在配置文件mybatis.xml添加配置
- sql解决(空值赋空)
nvl(temp_date, ' ') as tempDate
- 手动添加配置
@Configuration
public class MybatisConfig implements ApplicationContextAware {
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SqlSessionFactory bean = applicationContext.getBean(SqlSessionFactory.class);
org.apache.ibatis.session.Configuration configuration = bean.getConfiguration();
configuration.setCallSettersOnNulls(true);
}
}