欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis實戰(zhàn)之TypeHandler高級進階

 更新時間:2017年02月21日 10:07:54   作者:南軻夢  
本文主要介紹了自定義的枚舉TypeHandler的相關(guān)知識,具有很好的參考價值,下面跟著小編一起來看下吧

上篇文章分享了在項目實戰(zhàn)中自定義Mybatis的TypeHandler來處理枚舉類型。文章結(jié)尾也指出了美中不足之處,那就是每次都需要指定我們自定義的枚舉TypeHandler。 隨著項目枚舉類型的增多,每次都要寫一遍這個會令人很反感。那么,本次我們就來解決這一痛點。

思路分析

  1. 上篇文章講到, mybatis有默認的處理枚舉類型的TypeHandler,因此,我們要將我們自定義的枚舉TypeHandler注冊進入Mybatis。
  2. 注冊完我們自定義的TypeHandler后,還得告訴Mybatis只要一遇到我們指定的枚舉類型(上篇的DisplayedEnum)就用自定義的枚舉TypeHandler(上篇為EnumTypeHandler)進行轉(zhuǎn)換。由于Mybatis在啟動時就會通過TypeHandlerRegistry進行注冊,即建立JdbcType, JavaType, TypeHandler三者之間的關(guān)系, 因此,這意味著在Mybatis啟動時我們也需要通過TypeHandlerRegistry將我們的所有的枚舉類型(JavaType)與自定義的枚舉TypeHandler(EnumTypeHandler)建立聯(lián)系。

為了方便大家理解, 貼上Mybatis中的TypeHandlerRegistry的相關(guān)部分源碼:

 

實戰(zhàn)

SqlSessionFactoryBean

由于我們項目使用了Spring, 是用Spring集成的Mybatis(廢話,大家都是這么干的)。Spring通過SqlSessionFactoryBean來初始化啟動Mybatis。 因此,我們應(yīng)該在它身上下手,然而,一切并不是那么順利。

查看了一下SqlSessionFactoryBean的源碼,發(fā)現(xiàn)SqlSessionFactoryBean并沒有任何地方可以讓我們切入, 進而來調(diào)用TypeHandlerRegistry進行注冊我們的枚舉。 更令人蛋疼的是其所有屬性全是private, 這下不僅AOP切入不行,連通過繼承偷懶都不行了。

作罷,咱只有老老實實的重寫一遍SqlSessionFactoryBean的代碼了(copy還不簡單)。

DefaultSqlSessionFactoryBean

代碼量比較多,就只貼關(guān)鍵代碼了。步驟如下:

  1. DefaultSqlSessionFactoryBean繼承SqlSessionFactoryBean。
  2. 將SqlSessionFactoryBean中的代碼全部copy到DefaultSqlSessionFactoryBean。
  3. 調(diào)用以下方法。

切記, 以上代碼要在這個代碼之前執(zhí)行:

因為, xmlMapperBuilder.parse()方法會開始解析我們所有的所有mapper.xml的配置文件了,這時候會把resultMap也解析了,這就會導(dǎo)致我們自定義的TypeHandler不生效。

切記! 切記

最后

以上,代碼算是完工了,記得在Spring的配置文件中, 將SqlSessionFactoryBean替換為我們的DefaultSqlSessionFactoryBean。 不然我們的活就是白干了。

接下來,就可以開始浪了, 之前我們需要這樣寫:

<resultMap>
 ...
 <result column="status" jdbcType="TINYINT" property="status" typeHandler="xxx.xxx.EnumTypeHandler" />
 ...
</resultMap>

而現(xiàn)在,我們可以不寫typeHandler了。

<resultMap>
 ...
 <result column="status" jdbcType="TINYINT" property="status" />
 ...
</resultMap>

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關(guān)文章

  • Java類加載器ClassLoader用法解析

    Java類加載器ClassLoader用法解析

    這篇文章主要介紹了Java類加載器ClassLoader用法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • Java算法之冒泡排序?qū)嵗a

    Java算法之冒泡排序?qū)嵗a

    今天小編就為大家分享一篇關(guān)于Java算法之冒泡排序?qū)嵗a,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Mybatis基于TypeHandler實現(xiàn)敏感數(shù)據(jù)加密

    Mybatis基于TypeHandler實現(xiàn)敏感數(shù)據(jù)加密

    業(yè)務(wù)場景中經(jīng)常會遇到諸如用戶手機號,身份證號,銀行卡號,郵箱,地址,密碼等等信息,屬于敏感信息,本文就來介紹一下Mybatis基于TypeHandler實現(xiàn)敏感數(shù)據(jù)加密,感興趣的可以了解一下
    2023-10-10
  • springboot+zookeeper實現(xiàn)分布式鎖的示例代碼

    springboot+zookeeper實現(xiàn)分布式鎖的示例代碼

    本文主要介紹了springboot+zookeeper實現(xiàn)分布式鎖的示例代碼,文中根據(jù)實例編碼詳細介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Spring的@Scope注解作用解析

    Spring的@Scope注解作用解析

    這篇文章主要介紹了Spring的@Scope注解作用解析,@Scope注解用于設(shè)置實例的作用域,默認值是單實例,即當(dāng)IOC容器啟動后就調(diào)用該方法創(chuàng)建對象放到IOC容器中,以后每次獲取就是直接從容器中獲取,需要的朋友可以參考下
    2023-11-11
  • java+mysql實現(xiàn)商品搶購功能

    java+mysql實現(xiàn)商品搶購功能

    這篇文章主要為大家詳細介紹了java+mysql實現(xiàn)商品搶購功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Spring Boot 2.5.0 重新設(shè)計的spring.sql.init 配置有啥用

    Spring Boot 2.5.0 重新設(shè)計的spring.sql.init 配置有啥用

    前幾天Spring Boot 2.5.0發(fā)布了,其中提到了關(guān)于Datasource初始化機制的調(diào)整,有讀者私信想了解這方面做了什么調(diào)整。那么今天就要詳細說說這個重新設(shè)計的配置內(nèi)容,并結(jié)合實際情況說說我的理解和實踐建議
    2021-05-05
  • maven查看依賴樹的方法實現(xiàn)

    maven查看依賴樹的方法實現(xiàn)

    Maven依賴樹是以當(dāng)前項目的POM文件為根節(jié)點,列出了所有直接或間接依賴的依賴樹結(jié)構(gòu),本文就詳細的來介紹一下如何查看,感興趣的可以了解一下
    2023-08-08
  • java 生成有序賬號的實現(xiàn)方法

    java 生成有序賬號的實現(xiàn)方法

    下面小編就為大家?guī)硪黄猨ava 生成有序賬號的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • 淺談Java基準性能測試之JMH

    淺談Java基準性能測試之JMH

    JMH是Java Microbenchmark Harness的簡稱,一個針對Java做基準測試的工具。想準確的對一段代碼做基準性能測試并不容易,因為JVM層面在編譯期、運行時對代碼做很多優(yōu)化,當(dāng)代碼塊處于整個系統(tǒng)中運行時并不一定會生效,產(chǎn)生錯誤的基準測試結(jié)果,這個問題就是JMH要解決的
    2021-06-06

最新評論