好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

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

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

?

1

IFNULL(rate, '' ) as rate

ResultType利用实体返回

不用map

springMVC+mybatis查询数据

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

?

1

2

3

4

5

6

7

8

<? xml version = "1.0" encoding = "UTF-8" ?>

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD SQL MAP Config 3.1//EN"

    "http://mybatis.org/dtd/mybatis-3-config.dtd">

< configuration >

   < settings >

    < setting name = "callSettersOnNulls" value = "true" />

   </ settings >

</ configuration >

spring-mybatis.xml

?

1

2

3

4

5

6

7

<!-- spring和MyBatis完美整合,添加mybatis的配置映射文件 -->

   < bean id = "sqlSessionFactory" class = "org.mybatis.spring.SqlSessionFactoryBean" >

    < property name = "dataSource" ref = "dataSource" />

    < property name = "configLocation" value = "classpath:mybatis-configuration.xml" />

    <!-- 自动扫描mapping.xml文件 -->

    < property name = "mapperLocations" value = "classpath:mapping/*.xml" ></ property >

   </ bean >

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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 { }}

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

?

1

2

3

4

5

< resultMap id = "find" type = "java.util.LinkedHashMap" >

    < result property = "name" column = "name" />

    < result property = "phone" column = "phone" />

    < result property = "rate" column = "rate" typeHandler = "com.mybatis.EmptyStringIfNull" />

</ resultMap >

mybatis返回map空值未返回字段

mybatis 开启CallSettersOnNulls

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

@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();

}

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

原文链接:https://blog.csdn.net/lulidaitian/article/details/70941769

查看更多关于mybatis返回map类型数据空值字段不显示的解决方案的详细内容...

  阅读:47次