Mybatis中resultType为map时,null值的字段不返回问题

    技术2022-07-11  119

    问题描述

    <select id="getUser" parameterType="map" resultType="map"> SELECT id, name, addr FROM user WHERE id = #{id} </select>

    以上查询,当addr字段值在数据库中为null时,返回的结果如下:

    { "id": 1, "name": "test" }

    正常我们想要的应该是这样:

    { "id": 1, "name": "test", "addr": null }

    解决办法

    1.将null值变成空字符串

    SELECT id, name, case when addr is not null then addr else '' end addr FROM user WHERE id = #{id}

    2.传统项目配置xml文件中配置:

    <settings> <!-- 指定当结果集中值为 null 的时调用映射对象的 setter(map 对象时为 put)方法 --> <setting name="callSettersOnNulls" value="true" /> </settings>

    3. springboot项目properties中配置:

    mybatis.configuration.call-setters-on-nulls=true

    4. 在SqlSessionFactoryBean中配置:

    SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration(); configuration.setCallSettersOnNulls(true); factoryBean.setConfiguration(configuration);

    参考文章:https://www.cnblogs.com/ityangshuai/p/12759787.html

    Processed: 0.019, SQL: 9