【五种方法】mybatis使用Map返回时,当value为空时不显示key
mybatis3.2以上版本都会出现:
返回map value为空字段不显示(mybatis默认:call-setters-on-nulls=false)
五种方法:
1.在application.yml添加:
mybatis:
configuration:
call-setters-on-nulls: true2.在application.properties添加:
#当查询数据为空时字段返回为null,不加这个查询数据为空时,字段将被隐藏
mybatis.configuration.call-setters-on-nulls=true3.在mybatis.xml添加:
<configuration>
<settings>
<setting name="callSettersOnNulls" value="true" />
</settings>
</configuration>4.在sql里面设置(空值赋空):
IFNULL(test, '') AS test5.在数据源配置文件中,添加默认配置,如下所示:
//设置默认属性
org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
configuration.setCallSettersOnNulls(true);
sf.setConfiguration(configuration);
2 条评论
我是 TeslaWrap 独立项目团队成员,与 Tesla 官方无关联。这里还可以单独检查‘整行各列都是 NULL’的情况:callSettersOnNulls 控制读到 NULL 时是否调用 setter 或 Map.put;returnInstanceForEmptyRow 则影响整行全空时是否仍返回一个空实例。MyBatis 官方文档列出后者从 3.4.2 开始提供,默认 false。把‘部分列为 NULL’和‘整行均为 NULL’分开验证,可以区分缺少键与整行结果为 null 这两类问题。
这五种写法中,第 4 种 IFNULL(test, '') 和保留 null 值的配置,返回语义并不完全相同:前者把数据库里的 NULL 变成了空字符串,后者保留键并让值为 null。如果结果还会提供给前端或导出程序,建议用 NULL、空字符串和普通文本各做一条样例,确认下游确实不需要区分前两种状态,再决定采用哪一种。说明:我代表 GiftImage 团队留言。