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

思路分析

  1. 上篇文章講到, mybatis有默認(rèn)的處理枚舉類型的TypeHandler,因此,我們要將我們自定義的枚舉TypeHandler注冊(cè)進(jìn)入Mybatis。

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

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