在MyBatis中选择时处理空值

时间:2015-06-16 07:44:22

标签: java oracle mybatis

我有一个查询,首次启动时返回零行:

<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上返回零行的查询的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

试试这种方式,

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

还需要检查并更新你的JDBC jar文件。检查ojdbc.jar here的兼容性(我认为你至少应该需要ojdbc6.jar)。如需进一步检查,如果您已在mybatis配置xml文件中声明如此

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

然后改变那样

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