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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

mybatis源码解析(五) --- typehandler注册和处理的查询结果对象的类型转换

發布時間:2025/3/17 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mybatis源码解析(五) --- typehandler注册和处理的查询结果对象的类型转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一次分析了mapper接口動態代理調用的處理過程,在查詢結果后,然后轉換的java所對應的類型,這篇文章將對這個類型轉換處理詳細介紹,在Configuration中TypeHandlerRegistry這個類,是用來注冊

可以看到TypeHandlerRegistry注冊java中各種類型的類型處理器。 默認handler處理器的是Confguration中創建的faultResultHandler結果處理器, 這個是PreparedStatementHandler類中,執行query方法后,調用的ResultHandler調用handleResultSets方法,返回處理結果。 首先使從MapperStatement中查找對應的ResultMap對象,這里ResultMaps只有一個對象,就是我們在Mapper接口方法返回值類型,這里有點不是很明白,它這里設計有個有個返回值的,但是java里面不是只有一個返回值嗎,回頭再思考下,先看下面最重要的處理結果的過程,首先遍歷ResultMap列表,接著調用handlerResultSet接口,處理單個結果集,然后獲取下一個結果集,清除嵌套的對象的緩存。 這里主要是處理單個結果集,沒有父節點的映射,resultHandler為null,則調用的是DefaultResultHandler,接著調用handlerRowValue,最后關閉當前結果集。接下來重要看一下處理每一行代碼的。 這里分為是否沒有嵌套的對象,如果沒有,則處理沒一行的值,下面就簡單看一下handlerRowValueForSimpleResultMap這個方法. 這個方法主要是的獲取當前行的每一行的值,并轉換成對象,這個過程主要是在getRowValue這個方法中完成的,然后調用storeObject方法。存儲轉換后的結果存儲DefaultResultHandler中去。 這里首先代用createResultObject創建一個空的對象,然后調用Configuration中的newMetaObject方法創建一個元對象。然后調用applyAutomaticMappings,就是自動映射設置值到反射生成的對象中去,然后在設置有屬性映射的 屬性,處理完返回。 看到這里利用反射機制創建一個空的對象,然后接處理設置值到對象的每一個屬性上設值。 這里ObejectFactory創建的對象,反射完成創建返回的bean對象。 這里是先粗粒自動映射的列的值, 然后在執行有映射的列的值。最后返回。 這段代碼是找到自動映射的屬性,先從緩存中去,這里看到的mapperKey的組成resultMap+":"+columnPrefix,resultMapId進程過調試發現是類全名.方法名.-inline, 這個inline默認加的后綴,然后處理每一列的轉換。

總結

以上是生活随笔為你收集整理的mybatis源码解析(五) --- typehandler注册和处理的查询结果对象的类型转换的全部內容,希望文章能夠幫你解決所遇到的問題。

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