在 MyBatis 中选择时处理空值

Dealing with nulls when selecting in MyBatis

我有一个查询,在第一次启动时 returns 零行:

<select id="getParams" parameterType="map" resultMap="ParamsResultMap">
    SELECT ID, GROUPS, TEMPLATES, DATE_FROM, DATE_TO
    FROM MY_FILTERS 
    WHERE ID = #{id}
</select>

<resultMap id="ParamsResultMap" type="my.domain.ParamsVO">
    <result column="ID" property="id"/>
    <result column="GROUPS" property="groups"/>
    <result column="TEMPLATES" property="templates"/>
    <result column="DATE_FROM" property="dateFrom" jdbcType="TIMESTAMP"/>
    <result column="DATE_TO" property="dateTo" jdbcType="TIMESTAMP"/>
</resultMap>

没关系,因为我想在java中管理它:

ParamsVO params = myRepository.getParams(id);
if (params == null) {
    ...
}

但我遇到异常:

org.springframework.jdbc.UncategorizedSQLException: Error setting null for parameter #4 with JdbcType OTHER . 
Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. 
Cause: java.sql.SQLException: Invalid column type ; uncategorized SQLException for SQL []; 
SQL state [null]; error code [17004]; 

我试过使用 jdbcType = "DATE" 和不使用 jdbcType,结果相似。

我的问题是在 MyBatis 中处理 returns 零行的查询的正确方法是什么?

试试这个方法,

  <result column="DATE_TO" property="dateTo" jdbcType="DATE" javaType="java.util.Date"/>

并且还需要检查和更新您的 JDBC jar file.Check ojdbc.jar here 的兼容性(我认为您至少需要 ojdbc6.jar ) 。对于额外的检查,如果你已经在你的 mybatis 配置 xml 文件中这样声明

<settings>
     <setting name="jdbcTypeForNull" value="OTHER" />
</settings>

那就这样改

<settings>
    <setting name="jdbcTypeForNull" value="NULL" />
</settings>