Mybatis懒加载——返回前端数据 json序列化错误

    先来个大家一大丢的错误

 

HTTP Status 500 - Request processing failed; nested exception is 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.ssm.model.domain.UserEntity_$$_jvstf7f_0["handler"])

 

背景:

mybatis级联查询,配置了懒加载模式,结果通过springMvc返回json时报的错。

推测:

因为不懂mybatis的源码怎么实现懒加载的,既然是通过用到懒加载部分,再去sql查询,那么肯定是json序列化的时候查询了,由于可能会用到mybatis的一些类,估计就json序列化失败了吧。

解决:

请忽略上面两步,直接百度就能解决了。哈哈哈哈。

在所有相关的类前加上@JsonIgnoreProperties, 作用是json序列化时忽略bean中的一些属性序列化和反序列化时抛出的异常.

 

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

问题篇

配置文件篇的cloumn指的是级联时传递过来的参数。

对于关联的collection的属性,一定是集合,否则mybatis会报查一条,却返回多条的错误。

看到这里就可以结束了,下面都是代码,算是本人的一个代码库。

代码篇

先说第一句话,好像mybatis在调试的情况下懒加载是不起作用的。反正我调试的时候不起作用。只有运行的时候起作用。

mapper配置篇

UserMapper配置


        
        
        
        
        
        
        
        
        
        
        
        
        
        
    
    

BodyMapper配置


        
        
        
        
        
        
    

    

ScoreMapper配置

    
        
        
        
        
        
    

CardMapper配置

 
        
        
        
        
        
    
    
    

 

Service代码

 

 @Override
    public UserEntity selectUserById(Long userId) {
        String resource = "mybatis-config.xml";
        SqlSessionFactory sqlSessionFactory=null;
        SqlSession session = null;
        UserEntity userEntity = null;
        try{
            InputStream in = new ClassPathResource(resource).getInputStream();
            //创建单例工厂
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
            session = sqlSessionFactory.openSession();
            XmlMybatisTest xmlMybatisTest = new XmlMybatisTest();
            userEntity=xmlMybatisTest.testMapper(session);
            session.commit();
        }catch (Exception e){
            e.printStackTrace();
        }finally{
            if(session!= null){
                session.close();
            }
        }
        return userEntity;
    }

 

 

 

 

 

 

 

你可能感兴趣的:(其他)