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>
  • 相关阅读:
    date之Hi时间的思考
    空循环比较 for foreach array_map array_walk
    ECSHOP 数据库结构说明 (适用版本v2.7.3)
    自定义写入读出文件作为存储的函数
    session 重写进入redis测试
    单独批次性任务采用MySQL定时器解决需求
    php 接收 Content-Type 是 application/json的请求数据
    centos 6.4 mysql rpm 离线安装【备忘】
    solr单机版安装与基本部署
    vim&vi在编辑的时候突然卡死,不接收输入问题的解决
  • 原文地址:https://www.cnblogs.com/kongkongFabian/p/9509958.html
Copyright © 2011-2022 走看看