日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MyBatis 实际使用案例-typeHandlers【重点】

發布時間:2024/4/13 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MyBatis 实际使用案例-typeHandlers【重点】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

由于Java 類型和數據庫的JDBC 類型不是一一對應的(比如String 與varchar),所以我們把Java 對象轉換為數據庫的值,和把數據庫的值轉換成Java 對象,需要經過一定的轉換,這兩個方向的轉換就要用到TypeHandler。

有的同學可能會有疑問,我沒有做任何的配置,為什么實體類對象里面的一個String屬性,可以保存成數據庫里面的varchar 字段,或者保存成char 字段?

這是因為MyBatis 已經內置了很多TypeHandler(在type 包下),它們全部全部注冊在TypeHandlerRegistry 中,他們都繼承了抽象類BaseTypeHandler,泛型就是要處理的Java 數據類型。

當我們做數據類型轉換的時候,就會自動調用對應的TypeHandler 的方法。

如果我們需要自定義一些類型轉換規則,或者要在處理類型的時候做一些特殊的動作,就可以編寫自己的TypeHandler,跟系統自定義的TypeHandler 一樣,繼承抽象類BaseTypeHandler<T>。有4 個抽象方法必須實現,我們把它分成兩類:?

set 方法從Java 類型轉換成JDBC 類型的,get 方法是從JDBC 類型轉換成Java 類型的。

從Java 類型到JDBC 類型從JDBC 類型到Java 類型
setNonNullParameter:設置非空參數getNullableResult:獲取空結果集(根據列名),一般都是調用這個
getNullableResult:獲取空結果集

比如我們想要在獲取或者設置String 類型的時候做一些特殊處理,我們可以寫一個String 類型的TypeHandler(mybatis-standalone 工程)。

public class MyTypeHandler extends BaseTypeHandler<String> {public void setNonNullParameter(PreparedStatement ps, int i, String parameter,JdbcType jdbcType)throws SQLException {// 設置String 類型的參數的時候調用,Java 類型到JDBC 類型System.out.println("---------------setNonNullParameter1:"+parameter);ps.setString(i, parameter);}public String getNullableResult(ResultSet rs, String columnName) throws SQLException{// 根據列名獲取String 類型的參數的時候調用,JDBC 類型到java 類型System.out.println("---------------getNullableResult1:"+columnName);return rs.getString(columnName);}// 后面兩個方法省略………… }

第二步,在mybatis-config.xml 文件中注冊:

<typeHandlers><typeHandler handler="com.gupaoedu.type.MyTypeHandler"></typeHandler> </typeHandlers>

第三步,在我們需要使用的字段上指定,比如:

插入值的時候,從Java 類型到JDBC 類型,在字段屬性中指定typehandler:

<insert id="insertBlog" parameterType="com.gupaoedu.domain.Blog">insert into blog (bid, name, author_id)values (#{bid,jdbcType=INTEGER},#{name,jdbcType=VARCHAR,typeHandler=com.gupaoedu.type.MyTypeHandler},#{authorId,jdbcType=INTEGER}) </insert>

返回值的時候,從JDBC 類型到Java 類型,在resultMap 的列上指定typehandler:

<result column="name" property="name" jdbcType="VARCHAR" typeHandler="com.leon.type.MyTypeHandler"/>

【思考,不強制要求完成】

如果我們的對象里面有復雜對象,比如Blog 里面包括了一個Comment 對象,這個時候Comment 對象的全部屬性不能直接映射到數據庫的一個字段。

要求:創建一個TypeHandler,可以將任意的對象轉換為json 字符串,保存到數據庫的VARCHAR 類型中。在從數據庫查詢的時候,再轉換為原來的Java 對象。

1、在數據庫表添加一個VARCHAR 字段;

2、在Blog 對象中添加一個Comment 屬性,字段Integer id;String content;

3、JSON 工具沒有要求,jackson 或者fastjson、gson 都可以。

4、在查詢和插入的statement 上使用這個TypeHandler。

?

總結

以上是生活随笔為你收集整理的MyBatis 实际使用案例-typeHandlers【重点】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。