Mybatis懒加载,返回JSON异常 Could not write JSON: No serializer found for class org.apache.ibatis

Service中的代码
在这里插入图片描述Pojo类
在这里插入图片描述
mybatis的映射文件
在这里插入图片描述

在这里插入图片描述

进行测试,结果如下
在这里插入图片描述
断点调试后,发现返回的实体类,多了个属性handler
在这里插入图片描述
再实体类上加上@JsonIgnoreProperties(value = “handler”)
在这里插入图片描述
测试结果
在这里插入图片描述
原因
在采用redis存数据时,mybatis采用懒加载的时候,会生成一个关联实体类代理对象,代理对象会生成一个handler属性,由于jackson序列化的时候,handler没有getter和setter方法,会报出异常,在关联的类上面加@JsonIgnoreProperties(value = “handler”),忽略此属性值,即可解决.

在这里插入图片描述
注意:redis存数据时,会先执行get去内存数据库拿数据,如果内存数据库没有,则执行sql语句,查到封装对象后,调用put方法,把数据存入redis中(懒加载会触发),之后再返回对象给Controller,因此,无论Controller类中,有没有触发mybatis的懒加载,懒加载的对象都会被查询出来

在这里插入图片描述
存入redis中,是有两条数据,一条是key为com.atguigu.cache.mapper.DepartmentMapper.getEmBy的数据,一条是key为com.atguigu.cache.mapper.EmployeeMapper.getEmById的数据,因为连表查询,一共会调用两次put方法存数据,第一次是.DepartmentMapper触发的,之后会遍历DepartmentMapper.xml的关联表的方法,取出来作为key,再调用put方法,存储数据.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值