解决:查询数据库表中的字段值为null,mybatis查询结果resultType=map,不存储键值的问题

日常开发中,常在mapper接口层中  用map存值,也用map返回值。有时当数据库表中的某一个字段为空时,返回的map不会映射成键值对。

直接上代码:

1.mapper接口层

@Repository
public interface UserMapper {
    
    List<Map> selectUser();

}

2.mapper.xml映射文件,有一点注意的是,xml文件中sql语句最后面最好别加 分号 ,之前在开发中遇到过 分号问题,调试了很久才发现是这个错误。

<mapper namespace="com.swx.dao.UserMapper">

   <select id = "selectUser" resultType = "map" >   
          select username,password from user order by id;
   </select>
</mapper>

解决的方案:

一。如果用springboot整合mybatis框架

在application.properties文件中 添加 mybatis.configuration.callSettersOnNulls=true 可以解决用sql查数据库返回map允许字段为空的也映射出来。如果写的存储过程查询数据库,设置这些似乎都没用(因为我实际开发项目中是用的存储过程设置了不生效)。

二。如果直接用的mybatis-config.xml文件。

<configuration>

     <settings>

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

     </settings>

</configuration>

三。如果不嫌麻烦可以直接定义一个resultMap标签然后创建一个实体类,把要查询的数据库字段和实体类映射起来,直接返回实体类。

<resultMap id="userMap" type="com.swx.entity.User">
    <result property="id" column="id"></result>
    <result property="username" column="username"></result>
    <result property="password" column="password"></result>
</resultMap> 

<select id="selectUser" resultMap="userMap" >   
  select username,password from user order by id;
</select>

mapper接口层就是  public List<User> selectUser();这样返回的数据就是不管有没有空直接对应上来了。

 

以上希望对你有帮助。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值