解决mybatis返回数据类型为map,值为null的key没返回
mybatis使用Map返回时数据库为空的字段不返回问题 (https://www.cnblogs.com/guo-xu/p/12548949.html)
mybatis返回map时value值为null没有对应的key https://blog.csdn.net/FORLOVEHUAN/article/details/107410736
解决mybatis返回数据类型为map,值为null的key没返回(基于spring) https://blog.csdn.net/FORLOVEHUAN/article/details/107410736
方案1、mybtis 3.3以上版本,增加配置<setting name="callSettersOnNulls" value="true"/>
<?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>
<settings>
<!-- 当返回数据类型为map,设置callSettersOnNulls会把值为null的key也返回 -->
<setting name="callSettersOnNulls" value="true"/>
</settings>
</configuration>
方案2、自定义TypeHandler
2.1 则可以建立一个类,实现Mybatis的TypeHandler接口
package Cloud.Base.Storage.SQL.Handler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* 自定义TypeHandler
* 处理mybatis返回map的value值为null没有对应的key
*/
public class EmptyStringIfNull implements TypeHandler<String>
{
@Override
public String getResult(ResultSet rs, String columnName) throws SQLException
{
return (rs.getString(columnName) == null) ? "" : rs.getString(columnName);
}
@Override
public String getResult(ResultSet rs, int columnIndex) throws SQLException
{
return (rs.getString(columnIndex) == null) ? "" : rs.getString(columnIndex);
}
@Override
public String getResult(CallableStatement cs, int columnIndex) throws SQLException
{
return (cs.getString(columnIndex) == null) ? "" : cs.getString(columnIndex);
}
@Override
public void setParameter(PreparedStatement ps, int arg1, String str, JdbcType jdbcType) throws SQLException
{
}
}
2.2 返回结果集处理
<resultMap id="xxxMap" type="java.util.Map">
<result property="xxxxParam" column="xxxxParam" typeHandler="Cloud.Base.Storage.SQL.Handler.EmptyStringIfNull"></result>
</resultMap>