mybatis返回map类型数据空值字段不显示的解决方案

mybatis返回map数据空值字段不显示

查询sql添加每个字段的判断空

IFNULL(rate,'') as rate

ResultType利用实体返回

不用map

springMVC+mybatis查询数据

返回resultType=”map”时,如果数据为空的字段,则该字段省略不显示,可以通过添加配置文件,规定查询数据为空是则返回null。




  
    
  

spring-mybatis.xml


  
    
    
    
    
  

如果想要配置rate的默认值,例如“”字符串,则可以建立一个类,实现Mybatis的TypeHandler接口

public class EmptyStringIfNull implements TypeHandler {
    @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 { }}

在sql.xml文件定义与使用如下如下


    
    
    

mybatis返回map空值未返回字段

mybatis 开启CallSettersOnNulls

@Bean
public SqlSessionFactory sqlSessionFactoryBean() throws Exception
{
    SqlSessionFactoryBean sqlSessionFactoryBean = new      SqlSessionFactoryBean();
    sqlSessionFactoryBean.setDataSource(dataSource());
    Configuration configuration = new .Configuration();
    configuration.setCallSettersOnNulls(true);//map返回空字段消失问题
    PageInterceptor pagePlugin = new PageInterceptor();
    JalorResultSetInterceptor jalorResultSetPlugin = new JalorResultSetInterceptor();
    ProgramInterceptor programPlugin = new ProgramInterceptor();
    //添加插件
    sqlSessionFactoryBean.setPlugins(new Interceptor[] {pagePlugin, jalorResultSetPlugin, programPlugin});
    sqlSessionFactoryBean.setConfiguration(configuration);
    return sqlSessionFactoryBean.getObject();
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

你可能感兴趣的