一、问题描述

MyBatis 是 Apache 开源的一款优秀的持久化框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。MyBatis 可以返回 Map 结构,但是有时候会发现,当返回值是 Map 时,只会返回有值字段,空值字段不会返回,这就是 MyBatis 中返回值是 Map 时只返回有值字段,空值字段不返回的问题。

二、解决方案

1、在 MyBatis 的配置文件中添加如下配置:

<settings><setting name="mapUnderscoreToCamelCase" value="true"/></settings>
XML

这样就可以将 Java 对象的属性名称转换为数据库字段名称,从而解决 MyBatis 中返回值是 Map 时只返回有值字段,空值字段不返回的问题。

2、使用 @Results 注解:

MyBatis 提供了 @Results 注解,可以指定映射关系,从而解决 MyBatis 中返回值是 Map 时只返回有值字段,空值字段不返回的问题。

@Results({@Result(property = "name", column = "name"),@Result(property = "age", column = "age")})
Java

3、使用 resultMap:

MyBatis 也提供了 resultMap,可以实现更复杂的映射关系,从而解决 MyBatis 中返回值是 Map 时只返回有值字段,空值字段不返回的问题。

<resultMap id="userMap" type="User"><id property="id" column="id"/><result property="name" column="name"/><result property="age" column="age"/></resultMap>
XML

三、总结

MyBatis 中返回值是 Map 时只返回有值字段,空值字段不返回的问题,可以通过在 MyBatis 的配置文件中添加配置、使用 @Results注解和使用resultMap 等方式来解决。