创新互联www.cdcxhl.cn八线动态BGP香港云服务器提供商,新人活动买多久送多久,划算不套路!
在北海等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站设计制作、成都网站建设 网站设计制作按需制作,公司网站建设,企业网站建设,高端网站设计,全网营销推广,成都外贸网站建设,北海网站建设费用合理。上篇文章分享了在项目实战中自定义Mybatis的TypeHandler来处理枚举类型。文章结尾也指出了美中不足之处,那就是每次都需要指定我们自定义的枚举TypeHandler。 随着项目枚举类型的增多,每次都要写一遍这个会令人很反感。那么,本次我们就来解决这一痛点。
思路分析
为了方便大家理解, 贴上Mybatis中的TypeHandlerRegistry的相关部分源码:
实战
SqlSessionFactoryBean
由于我们项目使用了Spring, 是用Spring集成的Mybatis(废话,大家都是这么干的)。Spring通过SqlSessionFactoryBean来初始化启动Mybatis。 因此,我们应该在它身上下手,然而,一切并不是那么顺利。
查看了一下SqlSessionFactoryBean的源码,发现SqlSessionFactoryBean并没有任何地方可以让我们切入, 进而来调用TypeHandlerRegistry进行注册我们的枚举。 更令人蛋疼的是其所有属性全是private, 这下不仅AOP切入不行,连通过继承偷懒都不行了。
作罢,咱只有老老实实的重写一遍SqlSessionFactoryBean的代码了(copy还不简单)。
DefaultSqlSessionFactoryBean
代码量比较多,就只贴关键代码了。步骤如下:
切记, 以上代码要在这个代码之前执行:
因为, xmlMapperBuilder.parse()方法会开始解析我们所有的所有mapper.xml的配置文件了,这时候会把resultMap也解析了,这就会导致我们自定义的TypeHandler不生效。
切记! 切记
最后
以上,代码算是完工了,记得在Spring的配置文件中, 将SqlSessionFactoryBean替换为我们的DefaultSqlSessionFactoryBean。 不然我们的活就是白干了。
接下来,就可以开始浪了, 之前我们需要这样写:
... ...