【问题标题】:MyBatis return both emptyList() and nullMyBatis 返回 emptyList() 和 null
【发布时间】:2022-01-03 12:34:30
【问题描述】:

这是我的 myBatis 请求,它应该返回一个列表:

@Mapper
public interface ClientAccessMapper {
    List<ClientAccess> findByClientAndPartnerWithAutoRenewal(@Param("clientId") Long clientId,
                                                             @Param("partner") String partner,
                                                             @Param("autoRenewal") Boolean autoRenewal);
}

<select id="findByClientAndPartnerWithAutoRenewal" resultMap="ClientAccessResult">
        select * from client_access
        where client_id = #{clientId}
            and partner = #{partner}
        <if test="autoRenewal != null">
            and auto_renewal = #{autoRenewal}
        </if>
        order by id
    </select>

有时请求返回“null”而不是空列表。 得到后我有一个检查块:

final List<ClientAccess> clientAccesses = clientAccessMapper.findByClientAndPartnerWithAutoRenewal(client, partner, true);
        if (clientAccesses.isEmpty()) {/**/}

而我的clientAccesses.isEmpty() 有时会因为 null 而不是大小 = 0 的 List 而产生 NPE。 可能是什么问题?

【问题讨论】:

  • isEmpty() 应该通过空检查来保护
  • @bananas 我明白了,但我的问题是关于产生请求的结果。我正在尝试了解框架的工作原理
  • I'm trying to understand the framework's working 是另一个问题。使用文档
  • 我建议查看findByClientAndPartnerWithAutoRenewal 实现
  • @МаксимРыбалкин MyBatis 不会使用该映射器返回null。必须有其他东西(例如插件)改变结果。尝试在org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(String, Object, RowBounds, ResultHandler) 上设置断点,看看发生了什么。

标签: java mybatis spring-mybatis


【解决方案1】:

可能的空指针。 推荐使用:

CollectionUtils.isEmpty(priceList)

【讨论】:

  • 虽然这个解决方案可以工作,但 OP 调用引擎的方式似乎还有其他问题。这种解决方法应该没有必要。
猜你喜欢
  • 2017-11-06
  • 2013-10-18
  • 1970-01-01
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-30
相关资源
最近更新 更多