记一次Mybatis驼峰命名导致的线上BUG及处理方案

前言

方向从一开始就错了,还是执着的去寻找问题的解决方案,简直就是一场重大灾难,但这也是每个修行者的必由之路。这个线上问题,差点让我的心里防线崩溃,苦寻无门,最终得以解决也多亏了身边的各路大佬的群策群力,当然也少不了同事的一番苦情调侃。"一个bug解一天",还要我怎样,奥力给吧。开始我们的正文吧。

正文

  • 问题是这样的,我的springboot项目默认开启了驼峰模式,所以下划线的数据库字段会自动给我转为驼峰的模式,好巧不巧的是我们的第三方客户提供给我们的接口所有字段都是下划线分割的,我创建了这些下划线分割的属性对象实体,在我使用mybatis插入一条数据后,然后使用该下划线的实体属性对象去接收刚刚插入的数据,结果一直报对象为null的错误。说起来也是蛮心酸的,一直以为问题出现在了mybatis事务控制上,前面插入数据之后由于事务还没有提交所以后面会查不到数据,咨询了各位大佬,也说是这个问题导致的,可是使用默认的实体是能查出数据的,很神奇的发现系统出了鬼。简直是欲哭无泪,终于经过一整天的各种摸索,才发现是因为设置了驼峰,但是我的接收实体是下划线声明的属性,所以导致查询到的数据无法映射到我的实体里面,一直报null的问题,悲剧往往就出现在了这些小细节里面,顿时一万句草泥马从脑海中飘过。哎,真的是想死的心都有了。后面直接用了很low的方案补救。
  • 补救方案:

方案一:此放案是我处理这个紧急问题想到的临时方案,虽然方案是low了一点,但总算及时解决了线上问题,用户可以正常使用,也留出了足够的时间让我排查遇到的这个鬼畜一般的问题。那么就说下这个临时的解决方案,我们可以先用驼峰的实体去查询出所有的数据,然后再将驼峰中的属性值一个个赋值到下划线的属性实体中,这样就能取到对象中的值,返回给我的第三方调用,话说我的第三方也是够恶心的,给我的接口中的传参都是下划线分割,着实够恶心的吗,不知道我一直是一个规规矩矩的java小白吗,也是够了。哈哈。

方案二:相对来说就高大上了,这里的主要问题其实就是屏蔽全局的驼峰设置对于我们个别特殊的mapper实体映射的问题,这些下划线属性的命名的实体不能直接接收数据库的字段,相必我们都知道mybatis有俩种方式接收查询结果的数据,resultType和resultMap,解决这个问题,我们可以使用resultMap的方式接收数据,这样就可以屏蔽掉驼峰的影响,接收的数据会按照resultMap中的映射去接收数据,无论你是下划线字段还是驼峰字段还是其它乱七八糟的命名方式,其都可以映射,是不是很强大呢。哈哈,也怪小编自己比较懒,手动配置这些映射觉得特别麻烦,总是使用别名加resultType的方式接收数据,几乎不用resultMap,今天才体会到了其异乎强大的功能,存在即是合理的,真的是这个样子。感叹这些设计的精妙之处之时,也被这些作者的才华深深的折服了。

结语

好了,今天就码到这里了,虽然是比较水的一篇文章,但是也是希望那些初学者不要再犯和我一样的错误,别被身边的同事调侃,一个bug解一天,真的很扎心啊。

相关推荐
淼淼76310 分钟前
安装jdk1.8
java·开发语言
毕设源码-朱学姐30 分钟前
【开题答辩全过程】以 高校食堂餐饮管理系统的设计与实现为例,包含答辩的问题和答案
java
过期动态33 分钟前
Java开发中的@EnableWebMvc注解和WebMvcConfigurer接口
java·开发语言·spring boot·spring·tomcat·maven·idea
摇滚侠34 分钟前
IDEA 定义返回值快捷键
java·ide·intellij-idea
毕设源码-郭学长36 分钟前
【开题答辩全过程】以 高校考勤管理系统为例,包含答辩的问题和答案
java·eclipse
A懿轩A1 小时前
【Maven 构建工具】从零到上手 Maven:安装配置 + IDEA 集成 + 第一个项目(保姆级教程)
java·maven·intellij-idea
野犬寒鸦1 小时前
从零起步学习并发编程 || 第一章:初步认识进程与线程
java·服务器·后端·学习
我爱娃哈哈1 小时前
SpringBoot + Flowable + 自定义节点:可视化工作流引擎,支持请假、报销、审批全场景
java·spring boot·后端
XiaoFan0122 小时前
将有向工作流图转为结构树的实现
java·数据结构·决策树
小突突突2 小时前
浅谈Java中的反射
java·开发语言