生活随笔
收集整理的這篇文章主要介紹了
Mybatis类型转换器使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、mybatis類型轉換器,就是Java類型與數據庫的類型之間轉換的一個中介,由這個轉換器可以對類型進行映射,mybatis對于基礎類型都有默認類型轉換器,你可以自定義類型轉換器替代默認的轉換器,大多數情況下你無需替代它,但是對于Java中的復雜類型,比如對象想要映射成數據庫的json字符串,那么你就可以自定義類型轉換器。
mybatis自定義類型轉換器可以繼承TypeHandler或BaseTypeHandler兩個接口,并實現其中的方法。
BaseTypeHandler繼承TypeHandler,它們之間的關系使用了設計模式模板方法。
2、下面就以Java中為對象,數據庫中為JSON串相互轉換作為例子,來對類型轉換器進行一個簡單的學習。
2.1 數據庫有用戶表,用戶表中每個用戶有自己的賬號account,account作為JSON串存儲。
2.2 在Java中我們定義一個UserVO對象,其中account為一個對象,其他字段都是基礎數據類型:
2.3 編寫自定義類型轉換器,實現Java Accound對象 <---->數據庫account字符串 相互轉換,即新增時 Java Account Object --> varchar,查詢時 varchar —>Java Account Object
@MappedTypes({Account.class})
@MappedJdbcTypes({JdbcType.VARCHAR
})
public class MyTypeHandler<E extends Object> extends BaseTypeHandler<E> {private Class<E> type
;public MyTypeHandler(Class<E> type
) {if (type
== null) {throw new IllegalArgumentException("Type argument cannot be null");}this.type
= type
;}@Overridepublic void setNonNullParameter(PreparedStatement ps
, int i
, E parameter
, JdbcType jdbcType
) throws SQLException {String jsonStr
= JSON
.toJSONString(parameter
);ps
.setString(i
, jsonStr
);}@Overridepublic E getNullableResult(ResultSet rs
, String columnName
) throws SQLException {String accountStr
= rs
.getString(columnName
);Account account
= JSON
.parseObject(accountStr
, Account.class);return (E) account
;}@Overridepublic E getNullableResult(ResultSet rs
, int columnIndex
) throws SQLException {String accountStr
= rs
.getString(columnIndex
);Account account
= JSON
.parseObject(accountStr
, Account.class);return (E) account
;}@Overridepublic E getNullableResult(CallableStatement cs
, int columnIndex
) throws SQLException {String accountStr
= cs
.getString(columnIndex
);Account account
= JSON
.parseObject(accountStr
, Account.class);return (E) account
;}
}
2.4 編寫完自定義類型處理器,那么編寫查詢與新增sql,并指定類型處理器即可。
總結
以上是生活随笔為你收集整理的Mybatis类型转换器使用的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。