二七网站建设网站分析与优化
news/
2025/10/1 15:25:14/
文章来源:
二七网站建设,网站分析与优化,新网站大量收录好不好,哈尔滨门户网站设计报价每当MyBatis设置PreparedStatement的参数或从ResultSet中检索值时#xff0c;都会使用TypeHandler以适合Java类型的方式来检索值。下表描述了默认的TypeHandlers。
自MyBatis 3.4.5版本起#xff0c;默认支持JSR-310#xff08;日期和时间API#xff09;。
Type HandlerJ…每当MyBatis设置PreparedStatement的参数或从ResultSet中检索值时都会使用TypeHandler以适合Java类型的方式来检索值。下表描述了默认的TypeHandlers。
自MyBatis 3.4.5版本起默认支持JSR-310日期和时间API。
Type HandlerJava TypesJDBC TypesBooleanTypeHandlerjava.lang.Boolean, booleanAny compatible BOOLEANByteTypeHandlerjava.lang.Byte, byteAny compatible NUMERIC or BYTEShortTypeHandlerjava.lang.Short, shortAny compatible NUMERIC or SMALLINTIntegerTypeHandlerjava.lang.Integer, intAny compatible NUMERIC or INTEGERLongTypeHandlerjava.lang.Long, longAny compatible NUMERIC or BIGINTFloatTypeHandlerjava.lang.Float, floatAny compatible NUMERIC or FLOATDoubleTypeHandlerjava.lang.Double, doubleAny compatible NUMERIC or DOUBLEBigDecimalTypeHandlerjava.math.BigDecimalAny compatible NUMERIC or DECIMALStringTypeHandlerjava.lang.StringCHAR, VARCHARClobReaderTypeHandlerjava.io.Reader-ClobTypeHandlerjava.lang.StringCLOB, LONGVARCHARNStringTypeHandlerjava.lang.StringNVARCHAR, NCHARNClobTypeHandlerjava.lang.StringNCLOBBlobInputStreamTypeHandlerjava.io.InputStream-ByteArrayTypeHandlerbyte[]Any compatible byte stream typeBlobTypeHandlerbyte[]BLOB, LONGVARBINARYDateTypeHandlerjava.util.DateTIMESTAMPDateOnlyTypeHandlerjava.util.DateDATETimeOnlyTypeHandlerjava.util.DateTIMESqlTimestampTypeHandlerjava.sql.TimestampTIMESTAMPSqlDateTypeHandlerjava.sql.DateDATESqlTimeTypeHandlerjava.sql.TimeTIMEObjectTypeHandlerAnyOTHER, or unspecifiedEnumTypeHandlerEnumeration TypeVARCHAR any string compatible type, as the code is stored (not index).EnumOrdinalTypeHandlerEnumeration TypeAny compatible NUMERIC or DOUBLE, as the position is stored (not the code itself).SqlxmlTypeHandlerjava.lang.StringSQLXMLInstantTypeHandlerjava.time.InstantTIMESTAMPLocalDateTimeTypeHandlerjava.time.LocalDateTimeTIMESTAMPLocalDateTypeHandlerjava.time.LocalDateDATELocalTimeTypeHandlerjava.time.LocalTimeTIMEOffsetDateTimeTypeHandlerjava.time.OffsetDateTimeTIMESTAMPOffsetTimeTypeHandlerjava.time.OffsetTimeTIMEZonedDateTimeTypeHandlerjava.time.ZonedDateTimeTIMESTAMPYearTypeHandlerjava.time.YearINTEGERMonthTypeHandlerjava.time.MonthINTEGERYearMonthTypeHandlerjava.time.YearMonthVARCHAR or LONGVARCHARJapaneseDateTypeHandlerjava.time.chrono.JapaneseDateDATE 您可以覆盖或创建自己的TypeHandler来处理不受支持或非标准的类型。为此您需要实现org.apache.ibatis.type.TypeHandler接口或扩展org.apache.ibatis.type.BaseTypeHandler类并可选择将其映射到JDBC类型。以下是一个示例
// ExampleTypeHandler.java
MappedJdbcTypes(JdbcType.VARCHAR)
public class ExampleTypeHandler extends BaseTypeHandlerString {Overridepublic void setNonNullParameter(PreparedStatement ps, int i,String parameter, JdbcType jdbcType) throws SQLException {ps.setString(i, parameter);}Overridepublic String getNullableResult(ResultSet rs, String columnName)throws SQLException {return rs.getString(columnName);}Overridepublic String getNullableResult(ResultSet rs, int columnIndex)throws SQLException {return rs.getString(columnIndex);}Overridepublic String getNullableResult(CallableStatement cs, int columnIndex)throws SQLException {return cs.getString(columnIndex);}
}
!-- mybatis-config.xml --
typeHandlerstypeHandler handlerorg.mybatis.example.ExampleTypeHandler/
/typeHandlers
使用这样的TypeHandler会覆盖Java String属性和VARCHAR参数和结果的现有TypeHandler。请注意MyBatis不会根据数据库元数据进行内省来确定类型因此必须在参数和结果映射中指定它是一个VARCHAR字段以便连接正确的TypeHandler。这是因为直到执行语句时MyBatis才能意识到数据类型。
MyBatis会通过TypeHandler的泛型类型来确定您想要处理的Java类型但是您可以通过以下两种方式来覆盖这种行为 给typeHandler元素添加javaType属性例如javaTypeString。这将明确指定TypeHandler所要关联的Java类型。 在TypeHandler类上添加MappedTypes注解指定要关联的Java类型列表。如果同时指定了javaType属性MappedTypes注解将被忽略。
可以通过两种方式来指定关联的JDBC类型 给typeHandler元素添加jdbcType属性例如jdbcTypeVARCHAR。这将明确指定与TypeHandler关联的JDBC类型。 在TypeHandler类上添加MappedJdbcTypes注解指定要关联的JDBC类型列表。如果同时指定了jdbcType属性MappedJdbcTypes注解将被忽略。 在决定在ResultMap中使用哪个TypeHandler时已知Java类型来自结果类型但未知JDBC类型。因此MyBatis将使用组合javaType[Java类型]jdbcTypenull来选择一个TypeHandler。这意味着使用MappedJdbcTypes注解会限制TypeHandler的范围并且除非明确设置否则它将无法在ResultMap中使用。为了使一个TypeHandler可以在ResultMap中使用可以在MappedJdbcTypes注解上设置includeNullJdbcTypetrue。然而自从Mybatis 3.4.0版本开始如果一个单独的TypeHandler被注册用于处理一个Java类型默认情况下它将被用于使用该Java类型的ResultMaps即使没有includeNullJdbcTypetrue。
最后您可以让MyBatis为您的TypeHandler进行搜索
!-- mybatis-config.xml --
typeHandlerspackage nameorg.mybatis.example/
/typeHandlers 请注意当使用自动发现功能时只能使用注解来指定JDBC类型。
您可以创建一个通用的TypeHandler它能够处理多个类。为此您可以添加一个构造函数接收一个Class作为参数MyBatis在构造TypeHandler时将传递实际的类。
//GenericTypeHandler.java
public class GenericTypeHandlerE extends MyObject extends BaseTypeHandlerE {private ClassE type;public GenericTypeHandler(ClassE type) {if (type null) throw new IllegalArgumentException(Type argument cannot be null);this.type type;}... EnumTypeHandler和EnumOrdinalTypeHandler是通用的TypeHandler。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923970.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!