java - 放入 <result> 标签时不执行 MyBatis 自定义 TypeHandler

标签 java mybatis typehandler

我有一个 <resultMap>定制 typeHandler对于其中一个结果属性:

<resultMap id="foo" type="hashmap">
    ... 
    <result property="SERVICES_XML" javaType="string" jdbcType="CLOB" typeHandler="com.foo.bar.OracleClobTypeHandler" />
    ...
</resultMap>

无论我将我的处理程序附加到哪个属性(我的意思是这不是 不是 CLOB 特定的问题,也尝试使用 VARCHAR ),当我获取结果时不会调用处理程序来自数据库。

我已经在自定义处理程序的所有方法中设置了断点:

public class OracleClobTypeHandler implements TypeHandler<String> {

  @Override
  public void setParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
    log.debug("setParameter called");   <================ BREAKPOINT HERE
  }

  @Override
  public String getResult(ResultSet rs, String columnName)
        throws SQLException {
    log.debug("getResult 2 called");    <================ BREAKPOINT HERE
    return "";
  }

  @Override
  public String getResult(ResultSet rs, int columnIndex)
        throws SQLException {
    log.debug("getResult 2 called");    <================ BREAKPOINT HERE
    return "";
  }

  @Override
  public String getResult(CallableStatement cs, int columnIndex)
        throws SQLException {
    log.debug("getResult 3 called");    <================ BREAKPOINT HERE
    return "";
  }
}

显然以上方法都没有执行。

我试着把 <typeHandler javaType="java.lang.String" jdbcType="CLOB" handler="com.foo.bar.OracleClobTypeHandler"/>在 myBatis 中 <configuration> ,但这也不起作用。
也没有做任何其他事情,包括扩展 TypeHandler<Object>等等。

我做错了什么?

最佳答案

挖了很久很久,我终于找到了答案。

这似乎是 myBatis 中的一个错误。

为了让您的处理程序为 <result> 工作元素,你必须指定 column显式属性即使property属性已经匹配bean中的列名和字段名
就我而言,它看起来像这样:

 <result property="SERVICES_XML" column="SERVICES_XML" javaType="string" jdbcType="CLOB" typeHandler="com.foo.bar.OracleClobTypeHandler" />

请注意,上述更改还将导致在 <configuration> 中定义的处理程序标记工作,所以内联 typeHandler可能不再需要 - 那是我的情况。我最终得到了:

<configuration>
  <typeHandlers>
    <typeHandler javaType="java.lang.String" jdbcType="CLOB" handler="com.foo.bar.OracleClobTypeHandler"/>        
  </typeHandlers>
</configuration>

<result property="SERVICES_XML" column="SERVICES_XML" javaType="string" jdbcType="CLOB" />

关于java - 放入 <result> 标签时不执行 MyBatis 自定义 TypeHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20122157/

相关文章:

java - 如何在android中将日历对象从一个 Activity 发送到另一个 Activity ?

java - 在新线程中 toast

java - PostgreSQL - 使用 JDBC 写入 inet 列

java - 如何在 xml 文件中使用 myBatis 映射器创建 COPY 函数?

java - 如何配置 dao 文件来处理在 MyBatis 中插入 List<String>

java - 菜单中的嵌套循环

java - 合并两个ArrayList

java - MyBatis升级导致构建错误

java - 带有 MyBatis TypeHandler 的空对象模式

java - 将数组列表发送和检索到 oracle 存储过程