Mybatis查询结果为空时,为什么返回值为NULL或空集合?
发布网友
发布时间:2024-10-02 09:48
我来回答
共1个回答
热心网友
时间:2024-10-15 08:29
当使用 Mybatis 进行查询时,遇到结果为空的情况,返回值的类型和值可能会有所不同。这主要取决于查询结果的处理方式和Mybatis的配置。
首先,我们来看看JDBC中的ResultSet。它是一个存储查询结果的对象,不仅用于数据存储,还支持数据操作。Mybatis在执行完查询后,会通过ResultSetHandler处理这些结果。
默认情况下,Mybatis使用DefaultResultSetHandler,它会处理多个ResultSet并将它们映射到Java对象中。对于单个查询,如果返回的是单行数据,如通过selectOne,当查询结果为空时,由于只有一个结果集,DefaultResultSetHandler会判断结果集为空,直接返回null。而多行数据的查询,如selectList,即使查询结果为空,也会返回一个空的List,而非null。
这种差异与Mybatis的配置有关,特别是returnInstanceForEmptyRow属性。如果该属性开启,当查询所有列都为空时,Mybatis会返回一个空的对象实例,而非null。对于嵌套的结果集,如集合或关联对象,此特性同样适用。
总的来说,查询结果为空时,Mybatis会先初始化一个集合对象(如List或Map)来存储查询结果,然后再根据查询方法返回不同的值:单行查询返回null,多行查询返回空集合。这与查询对象的类型和Mybatis配置有关。