mybatis typeHandlers 型別處理器(xml配置四)
阿新 • • 發佈:2018-12-17
typeHandlers
為什麼會有型別轉換器typeHandlers
typeHandler起到一個橋樑作用,分別對應jdbcType和javaType
- jdbcType用於定義資料庫型別
- javaType用於定義Java型別
- typeHandler的作用就是承擔jdbcType和javaType之間的相互轉換,
讀:jdbcType -> typeHandler -> javaType 寫:javaType -> typeHandler -> jdbcType
系統定義typeHandlers
org.apache.ibatis.type.TypeHandlerRegistry
型別處理器 | Java 型別 | JDBC 型別 |
---|---|---|
BooleanTypeHandler | java.lang.Boolean, boolean | 資料庫相容的 BOOLEAN |
ByteTypeHandler | java.lang.Byte, byte | 資料庫相容的 NUMERIC 或 BYTE |
ShortTypeHandler | java.lang.Short, short | 資料庫相容的 NUMERIC 或 SHORT INTEGER |
IntegerTypeHandler | java.lang.Integer, int | 資料庫相容的 NUMERIC 或 INTEGER |
LongTypeHandler | java.lang.Long, long | 資料庫相容的 NUMERIC 或 LONG INTEGER |
FloatTypeHandler | java.lang.Float, float | 資料庫相容的 NUMERIC 或 FLOAT |
DoubleTypeHandler | java.lang.Double, double | 資料庫相容的 NUMERIC 或 DOUBLE |
BigDecimalTypeHandler | java.math.BigDecimal | 資料庫相容的 NUMERIC 或 DECIMAL |
StringTypeHandler | java.lang.String | CHAR, VARCHAR |
ClobReaderTypeHandler | java.io.Reader | - |
ClobTypeHandler | java.lang.String | CLOB, LONGVARCHAR |
NStringTypeHandler | java.lang.String | NVARCHAR, NCHAR |
NClobTypeHandler | java.lang.String | NCLOB |
BlobInputStreamTypeHandler | java.io.InputStream | - |
ByteArrayTypeHandler | byte[] | 資料庫相容的位元組流型別 |
BlobTypeHandler | byte[] | BLOB, LONGVARBINARY |
DateTypeHandler | java.util.Date | TIMESTAMP |
DateOnlyTypeHandler | java.util.Date | DATE |
TimeOnlyTypeHandler | java.util.Date | TIME |
SqlTimestampTypeHandler | java.sql.Timestamp | TIMESTAMP |
SqlDateTypeHandler | java.sql.Date | DATE |
SqlTimeTypeHandler | java.sql.Time | TIME |
ObjectTypeHandler | Any | OTHER 或未指定型別 |
EnumTypeHandler | Enumeration Type | VARCHAR-任何相容的字串型別,儲存列舉的名稱(而不是索引) |
EnumOrdinalTypeHandler | Enumeration Type | 任何相容的 NUMERIC 或 DOUBLE 型別,儲存列舉的索引(而不是名稱)。 |
InstantTypeHandler | java.time.Instant | TIMESTAMP |
LocalDateTimeTypeHandler | java.time.LocalDateTime | TIMESTAMP |
LocalDateTypeHandler | java.time.LocalDate | DATE |
LocalTimeTypeHandler | java.time.LocalTime | TIME |
OffsetDateTimeTypeHandler | java.time.OffsetDateTime | TIMESTAMP |
OffsetTimeTypeHandler | java.time.OffsetTime | TIME |
ZonedDateTimeTypeHandler | java.time.ZonedDateTime | TIMESTAMP |
YearTypeHandler | java.time.Year | INTEGER |
MonthTypeHandler | java.time.Month | INTEGER |
YearMonthTypeHandler | java.time.YearMonth | VARCHAR or LONGVARCHAR |
JapaneseDateTypeHandler | java.time.chrono.JapaneseDate | DATE |
普通註冊方式
<!-- 註冊處理器 -->
<typeHandlers>
<typeHandler javaType="String" jdbcType="NVARCHAR" handler="priv.dengjl.ns.handler.MyStringHandler" />
</typeHandlers>
使用方式
- 第一種:
jdbcType="NVARCHAR" javaType="string"
- 第二種:
typeHandler="priv.dengjl.ns.handler.MyStringHandler"
例子1
<resultMap id="BaseResultMap" type="priv.dengjl.ns.bean.TestOracle">
<result column="ID" jdbcType="DECIMAL" property="id" />
<result column="NAME" jdbcType="NVARCHAR" javaType="string" property="name" />
<result column="DESCRIPTION" typeHandler="priv.dengjl.ns.handler.MyStringHandler" jdbcType="OTHER" property="description" />
<result column="OTHER" jdbcType="TIMESTAMP" property="other" />
</resultMap>
例子2
<select id="selectByPrimaryKey" parameterType="java.lang.String"
resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from TEST_ORACLE
where NAME = #{name, jdbcType=NVARCHAR, javaType=string}
</select>
<select id="selectByDescrption" parameterType="java.lang.String"
resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from TEST_ORACLE
where DESCRIPTION = #{description, typeHandler=priv.dengjl.ns.handler.MyStringHandler}
</select>
包方式
<typeHandlers>
<package name="org.mybatis.example"/>
</typeHandlers>
包方式需要顯示在java類注型別
@MappedJdbcTypes(JdbcType.NVARCHAR) @MappedTypes(String.class)