zoukankan      html  css  js  c++  java
  • Mybatis类型转换介绍

    1.介绍:

      建立TypeHandler来对特殊的javaType和jdbcType的转换

    2.常用的类型转化:

     1 register(Boolean.class, new BooleanTypeHandler());  
     2 register(boolean.class, new BooleanTypeHandler());  
     3 register(Byte.class, new ByteTypeHandler());  
     4 register(byte.class, new ByteTypeHandler());  
     5 register(Short.class, new ShortTypeHandler());  
     6 register(short.class, new ShortTypeHandler());  
     7 register(Integer.class, new IntegerTypeHandler());  
     8 register(int.class, new IntegerTypeHandler());  
     9 register(Long.class, new LongTypeHandler());  
    10 register(long.class, new LongTypeHandler());  
    11 register(Float.class, new FloatTypeHandler());  
    12 register(float.class, new FloatTypeHandler());  
    13 register(Double.class, new DoubleTypeHandler());  
    14 register(double.class, new DoubleTypeHandler());  
    15 register(String.class, new StringTypeHandler());  
    16 register(String.class, JdbcType.CHAR, new StringTypeHandler());  
    17 register(String.class, JdbcType.CLOB, new ClobTypeHandler());  
    18 register(String.class, JdbcType.VARCHAR, new StringTypeHandler());  
    19 register(String.class, JdbcType.LONGVARCHAR, new ClobTypeHandler());  
    20 register(String.class, JdbcType.NVARCHAR, new NStringTypeHandler());  
    21 register(String.class, JdbcType.NCHAR, new NStringTypeHandler());  
    22 register(String.class, JdbcType.NCLOB, new NClobTypeHandler());  
    23 register(Object.class, JdbcType.ARRAY, new ArrayTypeHandler());  
    24 register(BigInteger.class, new BigIntegerTypeHandler());  
    25 register(BigDecimal.class, new BigDecimalTypeHandler());  
    26 register(Byte[].class, new ByteObjectArrayTypeHandler());  
    27 register(Byte[].class, JdbcType.BLOB, new BlobByteObjectArrayTypeHandler());  
    28 register(Byte[].class, JdbcType.LONGVARBINARY, new BlobByteObjectArrayTypeHandler());  
    29 register(byte[].class, new ByteArrayTypeHandler());  
    30 register(byte[].class, JdbcType.BLOB, new BlobTypeHandler());  
    31 register(byte[].class, JdbcType.LONGVARBINARY, new BlobTypeHandler());  
    32 register(Object.class, UNKNOWN_TYPE_HANDLER);  
    33 register(Object.class, JdbcType.OTHER, UNKNOWN_TYPE_HANDLER);  
    34 register(Date.class, new DateTypeHandler());  
    35 register(Date.class, JdbcType.DATE, new DateOnlyTypeHandler());  
    36 register(Date.class, JdbcType.TIME, new TimeOnlyTypeHandler());  
    37 register(java.sql.Date.class, new SqlDateTypeHandler());  
    38 register(java.sql.Time.class, new SqlTimeTypeHandler());  
    39 register(java.sql.Timestamp.class, new SqlTimestampTypeHandler());  
    40 register(Character.class, new CharacterTypeHandler());  
    41 register(char.class, new CharacterTypeHandler());  

    3.实现

      3.1 实现TypeHandler接口或者继承BaseTypeHandler抽象类

    •   BaseTypeHandler主要是在TypeHandler接口的基础上,对数据进行判空处理,并且继承了抽象类TypeReference。
    •   TypeReference可以通过getRawType()方法可以获取到当前TypeHandler所使用泛型的原始类型

      3.2 简单介绍

        TypeHandler<T>接口 : 

          setParameter(PreparedStatement ps, int i, T parameter,JdbcType jdbcType)//实现对配置的javaType类型转换成jdbcType类型的处理

          getResult(ResultSet rs, String columnName)//以下三种方式对应 jdbcType类型转换成javaType类型的处理

          getResult(ResultSet rs, int columnIndex)

          getResult(CallableStatement cs, int columnIndex)

        BaseTypeHandler<T>抽象类:(推荐使用此种方式)

          setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType)//实现对配置的javaType类型转换成jdbcType类型的处理

          getNullableResult(ResultSet rs, String columnName)//以下三种方式对应 jdbcType类型转换成javaType类型的处理

          getNullableResult(ResultSet rs, int columnIndex)

          getNullableResult(CallableStatement cs, int columnIndex)

      3.3 配置方式

        3.3.1 纯xml

    <!-- mybatis.xml配置 -->
    <typeHandlers>  
           <typeHandler handler="com.*.StringArrayTypeHandler" javaType="[Ljava.lang.String;" jdbcType="VARCHAR"/>  
    </typeHandlers> 

        3.3.2 注解与xml配置

    <typeHandlers>  
       <typeHandler handler="com.*.StringArrayTypeHandler"/>  
    </typeHandlers>
    
    @MappedTypes({String[].class})  
    @MappedJdbcTypes({JdbcType.VARCHAR})  
    public class StringArrayTypeHandler implements BaseTypeHandler<String[]>   

        3.3.3 扫描包下的注解,实现类需要包含@MappedJdbcTypes和@MappedTypes

    <typeHandlers>  
       <package name="com.*"/>  
    </typeHandlers>
  • 相关阅读:
    SQL Server 存储过程
    FindControl的详细介绍
    Transaction-SQL 游标
    硬盘安装工具nt6 hdd installer无法卸载的问题
    Some question about Source Tree
    java 简单加密
    java 多态与多重继承
    构造方法和方法的重载
    64位WIN7上安装11G R2 ,PLSQL的配置方法
    语录(排名不分先后)
  • 原文地址:https://www.cnblogs.com/kongkongFabian/p/9509958.html
Copyright © 2011-2022 走看看