pgup12 发表于 2016-11-27 07:05:37

mybatis中TypeHandles使用与扩展

  
    无论是MyBatis 在预处理语句中设置一个参数,还是从结果集中取出一个值时,类型处
理器被用来将获取的值以合适的方式转换成Java 类型。下面这个表格描述了默认的类型处
  理器。
  类型处理器                    Java 类型                     JDBC 类型
  BooleanTypeHandler        Boolean,boolean        任何兼容的布尔值
  ByteTypeHandler           Byte,byte              任何兼容的数字或字节类型
  ShortTypeHandler          Short,short            任何兼容的数字或短整型
  IntegerTypeHandler        Integer,int            任何兼容的数字和整型
  LongTypeHandler           Long,long              任何兼容的数字或长整型
  FloatTypeHandler          Float,float            任何兼容的数字或单精度浮点型
  DoubleTypeHandler         Double,double          任何兼容的数字或双精度浮点型
  BigDecimalTypeHandler     BigDecimal             任何兼容的数字或十进制小数类型
  StringTypeHandler         String                 CHAR 和VARCHAR 类型
  ClobTypeHandler           String                 CLOB 和LONGVARCHAR 类型
  NStringTypeHandler        String                 NVARCHAR 和NCHAR 类型
  NClobTypeHandler          String                 NCLOB 类型
  ByteArrayTypeHandler      byte[]                 任何兼容的字节流类型
  BlobTypeHandler           byte[]                 BLOB 和LONGVARBINARY 类型
  DateTypeHandler           Date (java.util )      TIMESTAMP 类型
  DateOnlyTypeHandler       Date (java.util )      DATE 类型
  TimeOnlyTypeHandler       Date (java.util )      TIME 类型
  SqlTimestampTypeHandler   Timestamp (java.sql )  TIMESTAMP 类型
  SqlDateTypeHandler        Date (java.sql )       DATE 类型
  SqlTimeTypeHandler        Time (java.sql )       TIME 类型
  ObjectTypeHandler         Any                    其他或未指定类型
  EnumTypeHandler           Enumeration 类型         VARCHAR-任何兼容的字符串类型,作为代码存储(而不是索引)。
  但是,有时候我们自定义java类型,需要入库,比如 java类型为:java.util.UUID,数据库类型为:varchar2。
  对java.util.UUID了解的话,java.util.UUID是没有提供属性,使用#{uuid.properties}是不可行的。
  这是时候我们需要使用mybatis提供typeHandle扩展来完成。
  举例:

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.UUID;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
public class UUIDTypeHandler extends BaseTypeHandler {
@Override
public Object getNullableResult(ResultSet rs, String columnName)
throws SQLException {
return UUID.fromString(rs.getString(columnName));
}
@Override
public Object getNullableResult(CallableStatement cs, int columnIndex)
throws SQLException {
return UUID.fromString((cs.getString(columnIndex)));
}
@Override
public void setNonNullParameter(PreparedStatement ps, int i,
Object parameter, JdbcType jdbcType) throws SQLException {
ps.setString(i, ((UUID) parameter).toString());
}
}


<typeHandlers>
<typeHandler handler="com.mapper.UUIDTypeHandler"
javaType="UUID" jdbcType="VARCHAR" />
</typeHandlers>

<id property="uuid" column="P_ID" typeHandler="com.mapper.UUIDTypeHandler"/>
  或者

#{pack.uuid,typeHandler=com.mapper.UUIDTypeHandler}
页: [1]
查看完整版本: mybatis中TypeHandles使用与扩展