Mybatis查询之级联查询

springboot+mybatis+Oracle 级联查询方法遇到的问题及解决方法

1.上代码:

首先 mybatis 级联查询方法:


    
    
    
    

   




实体对象:

@Data    
public class SysMenu implements Serializable{

   /**
    * 主键
    */
   private String id;
   /**
    * 菜单名称
    */
   private String menuName;
   /**
    * 菜单跳转路径
    */
   private String menuUrl;
   /**
    * 菜单父级id
    */
   private String parentId;

   /**
    * 子级菜单
    */
   private ArrayList children;

以上即可实现mybatis的递归获取子父级列表

2.问题:

就是我在请求时,提示错误信息:

org.springframework.http.converter.HttpMessageConversionException: Type definition error: 
[simple type, class org.apache.ibatis.executor.loader.javassist.JavassistProxyFactory$EnhancedResultObjectProxyImpl];
nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class 
org.apache.ibatis.executor.loader.javassist.JavassistProxyFactory$EnhancedResultObjectProxyImpl and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: 
com.seari.entity.ResultBean[\"data\"]->java.util.HashMap[\"result\"]-
>com.github.pagehelper.PageInfo[\"list\"]->com.github.pagehelper.Page[0]-
>com.test.entity.SysMenu_$$_jvstb9c_0[\"childrenList\"]->java.util.ArrayList[0]-
>com.test.entity.SysMenu_$$_jvstb9c_0[\"handler\"])",

3.解决:

原因是mybatis级联查询开启了“懒加载”导致json序列化出错。

因此在中关闭懒加载即可:fetchType="eager" 

FetchType.LAZY:懒加载,加载一个实体时,定义懒加载的属性不会马上从数据库中加载

FetchType.EAGER:急加载,加载一个实体时,定义急加载的属性会立即从数据库中加载

修改:

或者

@JsonIgnoreProperties(value = {"handler"})
public class SysMenu implements Serializable{
}

作用为:忽略序列化bean过程中抛出的某些异常。

至此 便可实现mybatis级联查询,

工作记录,因此对于一些问题没有深入了解,有不对之处,希望各位大佬指出,小弟定及时改正。

你可能感兴趣的:(springBoot)