springMVC+mybatis查询数据,返回resultType=”map”时,如果数据为空的字段,则该字段省略不显示。
环境:SpringMVC+mybatis
1、Controller代码:
@RequestMapping(value = "/query")
@ResponseBody
public ResponseEntity<JsonResult> paymentPay(String sql) {
List<Map<String, Object>> queryResult = commonQueryService.query(sql);
return ControllerHelper.returnJSONResult(true, "查询成功", queryResult);
}
2、Mapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.baoogu.scm.repository.mapper.systemConfig.CommonQueryMapper">
<select id="query" resultType="java.util.Map">
${sql}
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 不再忽略ResponseEntity返回时json对象属性属性,即不自动将值为null的对象属性忽略。
例如:t_user表中的email多数为空,返回时User.email属性会被忽略,添加后就不会忽略了。 --> <settings> <setting name="callSettersOnNulls" value="true" /> </settings> <typeAliases> <typeAlias alias="hashMap" type="java.util.HashMap"/> </typeAliases> <typeHandlers> <typeHandler handler="com.baoogu.scm.core.orm.mybatis.EnumDataTypeHandler" javaType="java.lang.Enum"/> </typeHandlers> </configuration>
注:红色部分为添加部分,主要部分。
4、数据库结构大致如下:
CREATE TABLE `t_user` (
`id` bigint(20) NOT NULL DEFAULT '0' COMMENT '主键',
`user_name` varchar(100) NOT NULL COMMENT '登录用户名',
`password` varchar(32) NOT NULL COMMENT '密码',
`mobile` varchar(15) DEFAULT NULL COMMENT '手机号',
`email` varchar(255) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='用户表';
不添加时,返回前台的结果大致如下:
可以发现,并没有email字段或属性。因为被自动省略了。
但是添加
<setting name="callSettersOnNulls" value="true" />
以后,如下图:
参考: http://blog.csdn.net/lulidaitian/article/details/70941769