Mybatis懒加载和@ResponseBody注解冲突的问题

版权声明:本文为博主原创文章,瞎写的仅供参考,转载请注出处 https://blog.csdn.net/yinkai1995/article/details/80042972

Mybatis懒加载和@ResponseBody注解冲突的问题

当项目中有多表关联的时候可能会用到Mybatis懒加载,如果是SSM项目,前台请求数据的时候,后台返回数据,如果Controller用了@ResponseBody注解会让Mybatis的懒加载失效(打印日志的时候会发现还是会发送查询子表数据的sql语句)。

发生这个问题的原因是用了@ResponseBody注解的方法在返回数据的时候,序列化的过程中jackson会调用类的get方法,而Mybatis的懒加载在调用get方法的时候触发,这时懒加载就没了意义。

按需求有多种解决方法,在方法或属性上加@JsonIgnore注解,在序列化的时候会忽略该属性使其不参与json转化,就不会调get方法,但是不推荐。

另一种做法就是@JsonIgnore和@JsonGetter这两个注解配合使用。

比如部门(Dept)和教师(Teacher),在部门类的教师类属性的get方法上加@JsonIgnore,另写一个方法,方法体个get方法一致,方法名无所谓,然后在这个方法上加@JsonGetter。

@JsonIgnore
public List<Teacher> getTeachers() {//默认的get方法
    return teachers;
}

@JsonGetter(value = "teachers")
public List<Teacher> getDetail() {//自定的方法
    return teachers;
}

public void setTeachers(List<Teacher> teachers) {
    this.teachers = teachers;
}

这样会让jackson在序列化的时候不调用get方法取值而去调用自定的getDetail方法,也就避免了调用get方法触发了Mybatis的懒加载。

展开阅读全文

没有更多推荐了,返回首页