其他分享
首页 > 其他分享> > mybaties的核心配置文件属性之typehandlers

mybaties的核心配置文件属性之typehandlers

作者:互联网

typehandles(类型处理器)

 

MyBatis 在设置预处理SQL语句(PreparedStatement)中所需要的 参数 或从 结果集 ResultSet 中获取对象时, 都会用类型处理器将获取到的值以合适的方式转换成 Java 类型。

 

 

类型处理器,主要用于处理 Java 类型与 JDBC 类型的映射匹配关系处理,下表描述了一些默认的类型处理器。

 

 

自定义类型处理器:

首先需要继承baseTypehandler或实现typehandler接口。

具体实现如下,先自定义类型处理器类 MyExampleTypeHandler :

// MyExampleTypeHandler.java

@MappedJdbcTypes(JdbcType.VARCHAR)

public class MyExampleTypeHandler extends BaseTypeHandler<String> {

 

  @Override

  public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {

    ps.setString(i, parameter);

  }

 

  @Override

  public String getNullableResult(ResultSet rs, String columnName) throws SQLException {

    return rs.getString(columnName);

  }

 

  @Override

  public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {

    return rs.getString(columnIndex);

  }

 

  @Override

  public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {

    return cs.getString(columnIndex);

  }

}

自定义类已设定:JdbcType.VARCHAR 与 String 类做映射转换(注解和泛型已体现)。

其次,在核心配置文件中设置类型处理器:

<!-- mybatis-config.xml -->

<typeHandlers>

  <typeHandler handler="org.mybatis.example.MyExampleTypeHandler"/>

</typeHandlers>

 

或者不使用注解方式的话,取消 @MappedJdbcTypes(JdbcType.VARCHAR) 注解,直接在 xml 配置中指定 jdbcType 与 javaType 映射 :

<!-- mybatis-config.xml -->

<typeHandlers>

  <typeHandler jdbcType="VARCHAR" javaType="string" handler="org.mybatis.example.MyExampleTypeHandler"/>

</typeHandlers>

 

这里,自定义类型处理器将会覆盖已有的处理 Java String 类型的属性以及 VARCHAR 类型的参数和结果的类型处理器,基本以上步骤就已经自定了 JdbcType.VARCHAR 与 String类做映射转换。

 

 

某个时候只希望自定义的类型处理器只用在某一个类中或某一个类的一个字段,其它都用默认的转换,这时候这样做。我们只需要把以上两步都去掉,在自定义类型处理类的注解@javaType和@MappedJdbcTypes都移除,配置文件中把 typehandler 属性配置移除,直接在映射文件中编写:

 

<resultMap id="MyResultMap" type="com.panshenlian.pojo.User">

        <!-- id为int类型,但是没指定自定义类型处理器,不受影响-->

        <id column="id" property="id" />

        <!-- username为String类型,但是没指定自定义类型处理器,不受影响-->

        <id column="username" property="username" />

        <!-- password为String类型,但是没指定自定义类型处理器,不受影响-->

        <id column="password" property="password" />

        

        

        <!-- birthday为String类型,指定自定义类型处理器,受影响!-->

        <id column="birthday" property="birthday"  typeHandler="com.panshenlian.typeHandler.MyStringHandler"/>

        

    </resultMap>

    <select id="findAll" resultType="com.panshenlian.pojo.User" resultMap="MyResultMap">

        select * from User

    </select>

标签:mybaties,JDBC,Java,String,文件属性,处理器,类型,java,typehandlers
来源: https://www.cnblogs.com/laoyu-love-life/p/14882875.html