W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
某些數(shù)據(jù)類(lèi)型的寫(xiě)入需要特殊處理,例如將字符串?dāng)?shù)據(jù)按照某種格式轉(zhuǎn)換成為時(shí)間日期類(lèi)型。這就需要用到 ?TypeHandler
?。
例如,數(shù)據(jù)庫(kù)中保存的是時(shí)間類(lèi)型,需要將其讀取成格式為? yyyy-MM-dd
? 的字符串。
@Table(mapUnderscoreToCamelCase = true)
public class TestUser {
@Column(typeHandler = MyDateTypeHandler.class)
private String myTime;
// getters and setters omitted
}
類(lèi)型讀寫(xiě)器為:
public class MyDateTypeHandler extends AbstractTypeHandler<String> {
public void setNonNullParameter(PreparedStatement ps, int i,
String parameter, Integer jdbcType) {
Date date = new SimpleDateFormat("yyyy-MM-dd").parse(parameter);
ps.setTimestamp(i, new Timestamp(date.getTime()));
}
public String getNullableResult(ResultSet rs, String columnName) {
return fmtDate(rs.getTimestamp(columnIndex));
}
public String getNullableResult(ResultSet rs, int columnIndex) {
return fmtDate(rs.getTimestamp(columnIndex));
}
public String getNullableResult(CallableStatement cs, int columnIndex) {
return fmtDate(cs.getTimestamp(columnIndex));
}
private String fmtDate(Timestamp sqlTimestamp) {
if (sqlTimestamp != null) {
Date date = new Date(sqlTimestamp.getTime());
return new SimpleDateFormat("yyyy-MM-dd").format(date);
}
return null;
}
}
HasorDB 內(nèi)置了 60 多個(gè) TypeHandler,基本涵蓋了各種情況以及數(shù)據(jù)類(lèi)型。詳細(xì)的信息請(qǐng)看 類(lèi)型處理器 相關(guān)章節(jié)。
將類(lèi)型處理器綁定到 ?Types.VARCHAR
? 上
TypeHandlerRegistry.DEFAULT.register(Types.VARCHAR, new MyTypeHandler());
下面代碼使用注解方式和上面是等效的
@MappedJdbcTypes(Types.VARCHAR)
public class MyTypeHandler extends AbstractTypeHandler<String> {
...
}
// 注冊(cè)處理器
TypeHandlerRegistry.DEFAULT.register(MyTypeHandler.class, new MyTypeHandler());
?
TypeHandlerRegistry.DEFAULT
? 是全局類(lèi)型處理器注冊(cè)中心,如需要特殊定制可以 ?new
?一個(gè)。
將類(lèi)型處理器綁定到 ?StringBuilder
?類(lèi)型上
TypeHandlerRegistry.DEFAULT.register(StringBuilder.class, new MyTypeHandler());
下面代碼使用注解方式和上面是等效的
@MappedJavaTypes(StringBuilder.class)
public class MyTypeHandler extends AbstractTypeHandler<String> {
...
}
// 注冊(cè)處理器
TypeHandlerRegistry.DEFAULT.register(MyTypeHandler.class, new MyTypeHandler());
只有當(dāng) Java類(lèi)型為 ?InputStream
?并且 ?Jdbc Type
? 為 ?Types.BIGINT
? 時(shí)
TypeHandlerRegistry.DEFAULT.registerCross(
Types.BIGINT, InputStream.class, new MyTypeHandler());
下面代碼使用注解方式和上面是等效的
@MappedCross(
javaTypes = @MappedJavaTypes(InputStream.class),
jdbcType = @MappedJdbcTypes(Types.BIGINT))
public class MyTypeHandler extends AbstractTypeHandler<String> {
...
}
// 注冊(cè)處理器
TypeHandlerRegistry.DEFAULT.register(MyTypeHandler.class, new MyTypeHandler());
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: