MyBatis自定义了一个未执行的typeHandler

时间:2016-10-31 08:33:47

标签: java mybatis

在3.2.8官方文档中,' typeHandlers'部分,我有一个测试,然后发现它不能覆盖默认的org.apache.ibatis.type.StringTypeHandler。我调试它,它在StringTypeHandler中停止,而不是ExampleTypeHandler。 这是mybatis-config.xml文件:

$categories = Category::has('products')->with('products')->get();

,这是ExampleTypeHandler.java

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties resource="db.properties"/>

    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    <typeAliases>
        <package name="com.solverpeng.mybatis.beans"/>
    </typeAliases>

    <typeHandlers>
        <typeHandler handler="com.solverpeng.mybatis.typeHandlers.ExampleTypeHandler"/>
    </typeHandlers>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/solverpeng/mybatis/beans/mapper/CustomerMapper.xml"/>
    </mappers>
</configuration>

1 个答案:

答案 0 :(得分:1)

我假设你试图覆盖Varchar =&gt; String默认类型处理程序 但the documentation you refers to指定:

  

您可以覆盖类型处理程序或创建自己的来处理   不支持或非标准类型

Varchar&lt; =&gt;字符串是支持/标准类型处理的最常见情况之一。

似乎 Mybatis不允许用户定义的类型处理程序在lib中定义的类型处理程序的隐式覆盖(在配置中定义,然后是应用程序的全局)。

然后,您可能必须在resultMap中显式引用自定义结果处理程序:

<result property="name" column="Name" typeHandler="com.example.mybatis.type.handler.ExampleTypeHandler" />

或设置参数时:

#{name, typeHandler=com.example.mybatis.type.handler.ExampleTypeHandler}

编辑:经过进一步测试,结果发现可以在resulMap中没有显式声明的情况下调用ExampleTypeHandler。罪魁祸首是应删除的注释:

@MappedJdbcTypes(JdbcType.VARCHAR)

评论注释&amp;运行/取消注释&amp;跑,你会看到差异。