Mybatis结果集和实体类映射的一个小知识点

前情提要:
需求是将数据库加密过的字段解密,在前端展示。用的是Mybatis <resultMapper <result配 typeHandler的方式代理解密方法。

需求:
①如果数据库存的是0加密后的字符串,比如abc,那么解密回来,会是0。②现在需要如果数据库(右连接该表)这个字段,若不存在,是null,希望也能默认显示0。

bug:
①的解密很正常。②没有显示0,还是显示的null。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2020年11月15日白天当时这么误认为↑


日期晚上思考/分析真正/实际原因↓:

 // null -> "0" (  AESHandler不知为啥对数据库字段null的没起效果 有一种可能:mybatis框架下mysql结果字段往实体类上去映射时,如果一个字段是null,他就懒得去映射了【查出的结果中不查这个字段,我知道肯定是不会映射的,但如果查出来字段值是Null呢】,也就没有用到Mapper的这个字段映射也就没有用到Handler,所以没有! )
<!--    mybatis的映射有小坑:如果结果集中这个字段虽查但Null,这个字段就也不映射了,用不到<resultMap对这行的<result映射配置,及自然也更用不到typeHandler了-->
换句话说,如果结果集中这个字段虽查但Null,那这个字段也不会参与/没有资格和实体类该属性的映射

解决
在这里插入图片描述
在这里插入图片描述

由此,收获/获得了一个Mybatis映射的新坑新小知识点
mybatis框架下mysql结果集与实体类字段映射时,不仅是,当结果集没有这个字段,那么框架不会关心‘而实体类却有的字段’,也就是以mysql表为准,实体类增量或减量的字段不关心!而且,如果结果集查了的字段,但确是null的,也不会发生映射(get、set),也会被忽略掉(可以认为该字段它就没有资格被映射了~。ps.让我想到一件类似的事情,Spring中如果该类上没有用类似于@Component声明给spring托管注入ioc的话,那么(该类)它的成员们也没有资格取用已注入了ioc里的东西)。其实我是框架设计者我也会这么干的,多省力多效率了呀,省去“认为”(绝大多数情况时是)多此一举、冗余、低智的操作,是为了简单的加快效率了呢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值