互联网 网站建设,9951026企业邮箱888,常山做网站,文化建设应先于经济发展前言
方向从一开始就错了#xff0c;还是执着的去寻找问题的解决方案#xff0c;简直就是一场重大灾难#xff0c;但这也是每个修行者的必由之路。这个线上问题#xff0c;差点让我的心里防线崩溃#xff0c;苦寻无门#xff0c;最终得以解决也多亏了身边的各路大佬的群…前言
方向从一开始就错了还是执着的去寻找问题的解决方案简直就是一场重大灾难但这也是每个修行者的必由之路。这个线上问题差点让我的心里防线崩溃苦寻无门最终得以解决也多亏了身边的各路大佬的群策群力当然也少不了同事的一番苦情调侃。“一个bug解一天”还要我怎样奥力给吧。开始我们的正文吧。
正文
问题是这样的我的springboot项目默认开启了驼峰模式所以下划线的数据库字段会自动给我转为驼峰的模式好巧不巧的是我们的第三方客户提供给我们的接口所有字段都是下划线分割的我创建了这些下划线分割的属性对象实体在我使用mybatis插入一条数据后然后使用该下划线的实体属性对象去接收刚刚插入的数据结果一直报对象为null的错误。说起来也是蛮心酸的一直以为问题出现在了mybatis事务控制上前面插入数据之后由于事务还没有提交所以后面会查不到数据咨询了各位大佬也说是这个问题导致的可是使用默认的实体是能查出数据的很神奇的发现系统出了鬼。简直是欲哭无泪终于经过一整天的各种摸索才发现是因为设置了驼峰但是我的接收实体是下划线声明的属性所以导致查询到的数据无法映射到我的实体里面一直报null的问题悲剧往往就出现在了这些小细节里面顿时一万句草泥马从脑海中飘过。哎真的是想死的心都有了。后面直接用了很low的方案补救。补救方案 方案一此放案是我处理这个紧急问题想到的临时方案虽然方案是low了一点但总算及时解决了线上问题用户可以正常使用也留出了足够的时间让我排查遇到的这个鬼畜一般的问题。那么就说下这个临时的解决方案我们可以先用驼峰的实体去查询出所有的数据然后再将驼峰中的属性值一个个赋值到下划线的属性实体中这样就能取到对象中的值返回给我的第三方调用话说我的第三方也是够恶心的给我的接口中的传参都是下划线分割着实够恶心的吗不知道我一直是一个规规矩矩的java小白吗也是够了。哈哈。 方案二相对来说就高大上了这里的主要问题其实就是屏蔽全局的驼峰设置对于我们个别特殊的mapper实体映射的问题这些下划线属性的命名的实体不能直接接收数据库的字段相必我们都知道mybatis有俩种方式接收查询结果的数据resultType和resultMap解决这个问题我们可以使用resultMap的方式接收数据这样就可以屏蔽掉驼峰的影响接收的数据会按照resultMap中的映射去接收数据无论你是下划线字段还是驼峰字段还是其它乱七八糟的命名方式其都可以映射是不是很强大呢。哈哈也怪小编自己比较懒手动配置这些映射觉得特别麻烦总是使用别名加resultType的方式接收数据几乎不用resultMap今天才体会到了其异乎强大的功能存在即是合理的真的是这个样子。感叹这些设计的精妙之处之时也被这些作者的才华深深的折服了。 结语
好了今天就码到这里了虽然是比较水的一篇文章但是也是希望那些初学者不要再犯和我一样的错误别被身边的同事调侃一个bug解一天真的很扎心啊。