全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Mybatis实战之TypeHandler高级进阶

上篇文章分享了在项目实战中自定义Mybatis的TypeHandler来处理枚举类型。文章结尾也指出了美中不足之处,那就是每次都需要指定我们自定义的枚举TypeHandler。 随着项目枚举类型的增多,每次都要写一遍这个会令人很反感。那么,本次我们就来解决这一痛点。

思路分析

  1. 上篇文章讲到, mybatis有默认的处理枚举类型的TypeHandler,因此,我们要将我们自定义的枚举TypeHandler注册进入Mybatis。
  2. 注册完我们自定义的TypeHandler后,还得告诉Mybatis只要一遇到我们指定的枚举类型(上篇的DisplayedEnum)就用自定义的枚举TypeHandler(上篇为EnumTypeHandler)进行转换。由于Mybatis在启动时就会通过TypeHandlerRegistry进行注册,即建立JdbcType, JavaType, TypeHandler三者之间的关系, 因此,这意味着在Mybatis启动时我们也需要通过TypeHandlerRegistry将我们的所有的枚举类型(JavaType)与自定义的枚举TypeHandler(EnumTypeHandler)建立联系。

为了方便大家理解, 贴上Mybatis中的TypeHandlerRegistry的相关部分源码:

 

实战

SqlSessionFactoryBean

由于我们项目使用了Spring, 是用Spring集成的Mybatis(废话,大家都是这么干的)。Spring通过SqlSessionFactoryBean来初始化启动Mybatis。 因此,我们应该在它身上下手,然而,一切并不是那么顺利。

查看了一下SqlSessionFactoryBean的源码,发现SqlSessionFactoryBean并没有任何地方可以让我们切入, 进而来调用TypeHandlerRegistry进行注册我们的枚举。 更令人蛋疼的是其所有属性全是private, 这下不仅AOP切入不行,连通过继承偷懒都不行了。

作罢,咱只有老老实实的重写一遍SqlSessionFactoryBean的代码了(copy还不简单)。

DefaultSqlSessionFactoryBean

代码量比较多,就只贴关键代码了。步骤如下:

  1. DefaultSqlSessionFactoryBean继承SqlSessionFactoryBean。
  2. 将SqlSessionFactoryBean中的代码全部copy到DefaultSqlSessionFactoryBean。
  3. 调用以下方法。

切记, 以上代码要在这个代码之前执行:

因为, xmlMapperBuilder.parse()方法会开始解析我们所有的所有mapper.xml的配置文件了,这时候会把resultMap也解析了,这就会导致我们自定义的TypeHandler不生效。

切记! 切记

最后

以上,代码算是完工了,记得在Spring的配置文件中, 将SqlSessionFactoryBean替换为我们的DefaultSqlSessionFactoryBean。 不然我们的活就是白干了。

接下来,就可以开始浪了, 之前我们需要这样写:

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

而现在,我们可以不写typeHandler了。

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

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# mybatis  # typehandler  # Mybatis实现自定义的typehandler三步曲  # MyBatis自定义typeHandler的完整实例  # MyBatis-Plus如何通过注解使用TypeHandler  # Mybatis实现自定义类型转换器TypeHandler的方法  # Mybatis中自定义TypeHandler处理枚举详解  # Mybatis自定义TypeHandler解决特殊类型转换问题详解  # Mybatis之类型处理器TypeHandler的作用与自定义方式  # MyBatis使用自定义TypeHandler转换类型的实现方法  # MyBatis-Plus 中 typeHandler 的使用实例详解  # MyBatis中TypeHandler的使用教程详解  # 一文搞懂MyBatis中TypeHandler机制  # 自定义  # 上篇  # 一遍  # 每次都  # 配置文件  # 启动时  # 的是  # 都是  # 这一  # 就会  # 看了  # 让我们  # 之处  # 还不  # 要在  # 我们可以  # 较多  # 美中不足  # 还得  # 重写 


相关文章: ppt制作免费网站有哪些,ppt模板免费下载网站?  Java解压缩zip - 解压缩多个文件或文件夹实例  已有域名和空间,如何快速搭建网站?  建站之星导航如何优化提升用户体验?  香港服务器网站推广:SEO优化与外贸独立站搭建策略  如何自定义建站之星模板颜色并下载新样式?  常州自助建站费用包含哪些项目?  大型企业网站制作流程,做网站需要注册公司吗?  如何在阿里云香港服务器快速搭建网站?  网站制作员失业,怎样查看自己网站的注册者?  如何在万网自助建站平台快速创建网站?  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  怎么将XML数据可视化 D3.js加载XML  制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?  公司网站的制作公司,企业网站制作基本流程有哪些?  高端建站三要素:定制模板、企业官网与响应式设计优化  深圳网站制作案例,网页的相关名词有哪些?  linux top下的 minerd 木马清除方法  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  ,想在网上投简历,哪几个网站比较好?  宝塔Windows建站如何避免显示默认IIS页面?  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  如何快速上传自定义模板至建站之星?  深圳网站制作的公司有哪些,dido官方网站?  已有域名如何免费搭建网站?  建站之星24小时客服电话如何获取?  建站之星云端配置指南:模板选择与SEO优化一键生成  设计网站制作公司有哪些,制作网页教程?  如何快速辨别茅台真假?关键步骤解析  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  建站主机选哪家性价比最高?  如何在万网ECS上快速搭建专属网站?  建站之星下载版如何获取与安装?  如何通过.red域名打造高辨识度品牌网站?  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  在线制作视频的网站有哪些,电脑如何制作视频短片?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  如何在万网自助建站中设置域名及备案?  安徽网站建设与外贸建站服务专业定制方案    c++ stringstream用法详解_c++字符串与数字转换利器  网站设计制作公司地址,网站建设比较好的公司都有哪些?  网站微信制作软件,如何制作微信链接?  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  韩国服务器如何优化跨境访问实现高效连接?  ,柠檬视频怎样兑换vip?  岳西云建站教程与模板下载_一站式快速建站系统操作指南  C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换  如何在企业微信快速生成手机电脑官网?  建站之星备案是否影响网站上线时间? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。