解决方法:配置mybatis配置中的callSettersOnNulls参数为ture;
官网是这样介绍这个参数的:
指定当结果集中值为 null 的时候是否调用映射对象的 setter(map 对象时为 put)方法,这在依赖于 Map.keySet() 或 null 值初始化的时候比较有用。注意基本类型(int、boolean 等)是不能设置成 null 的。
默认情况下,callSettersOnNulls为false,也就是说如果返回的结果中某个参数的值为null,mybatis可能不返回这个参数。进而在代码中导致空指针异常。下面是一个例子:
mysql表格:
id | name | age |
---|---|---|
1 | 张三 | 18 |
2 | 李四 | 20 |
3 | 王五 | null |
mapper:
<select id="selectUserById" resultType="hashmap">
SELECT
*
FROM
user
WHERE
id = #{id}
</select>
使用selectUserById查询id=3的用户时,会发现返回的map中,只有两个key,即id和name,这就进而可能在代码中导致出现空指针异常
在springboot中可配置mybatis
#指定当结果集中值为 null 的时候是否调用映射对象的 setter(map 对象时为 put)方法
mybatis.configuration.call-setters-on-nulls=true
在springboot中可配置mybatis-plus
#指定当结果集中值为 null 的时候是否调用映射对象的 setter(map 对象时为 put)方法
mybatis-plus.configuration.call-setters-on-nulls=true
在SSM中可配置
<settings>
<setting name="callSettersOnNulls" value="true"/>
</settings>
下面给出mybatis和mybatis-plus的官网地址,你前往查看详细介绍;
mybatis:前往mybatis官网
mybatis-plus:前往mybatis-plus官网