본문 바로가기
DB

[MyBatis] All Element Are Null 오류

by soro.k 2022. 2. 10.

게시판 모듈을 생성하면서 Tree 구조로 댓글 데이터를 가져오는데 List가 카운트는 되지만 nullException이 발생하면서 데이터를 가져오지 못하고 있었다. 원인은 참고하는 인스턴스가 없었기 때문인데 분명히 VO객체를 잘 생성해놨기 때문에 이 객체를 인식하는 설정을 놓치고 있다는 생각이 들어 파일을 보다가 해결한 과정을 정리해본다.

 

해결 방법

1. resultType에 VO 또는 DTO객체 이름이 제대로 쓰여져 있는지 확인하기.

2. 1번이 제대로 쓰여져 있다면 JAVA config파일 안 sessionFactoryBean.setTypeAliasesPackage에 객체의 경로를 작성했는지, 작성했다면 오타나 잘못된 부분이 없는지 확인하기.

 


JAVA config

@Configuration
@MapperScan({
    "매퍼 파일이 담긴 패키지 경로",
})
public class MyBatisConfig {
    
    @Autowired
    private ApplicationContext applicationContext;
    
    @Autowired
    DataSource dataSource;
    
    @Bean
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
        sessionFactoryBean.setDataSource( dataSource);
    
        // resultType으로 사용할 DTO, VO객체 지정
        sessionFactoryBean.setTypeAliasesPackage(
                "com.app.study.dto," +
                ...
        );
        
        sessionFactoryBean.setConfigLocation( 
        	applicationContext.getResource("classpath:/mybatis-config.xml"));
        sessionFactoryBean.setMapperLocations( 
        	applicationContext.getResources("classpath:/mappers/**/*.xml"));

        return sessionFactoryBean.getObject();
    }
}

 

DataSource 인터페이스

DataSource 오브젝트를 사용하여 데이터 소스에 연결하는 역할을 하는 인터페이스이다. DriverManager로 데이터 소스에 연결했을 때 특정 JDBC 드라이버 클래스 이름 및 드라이버 URL을 식별해야 하므로 발생하는 이식성 저하를 보완할 수 있다.

 

SqlSessionFactory 객체

데이터베이스와의 연결과 SQL의 실행에 대한 모든 것을 가진 가장 중요한 객체

 

SqlSessionFactoryBean의 속성

이름 내용
typeAliasesPackage Aliases에 해당하는 클래스를 스캔하기 위한 패키지 경로를 지정
configLocation mybatis 설정 파일이 위치한 경로를 지정
mapperLocations Mapper를 스캔하기 위한 XML 파일 경로 지정

 

 

mybatis-config.xml

<!-- mybatis-config.xml -->

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<settings>
    	<setting name="mapUnderscoreToCamelCase" value="true"/>
        ...
    <settings>
</configuration>

 

Setting 설정 정보

https://mybatis.org/mybatis-3/ko/configuration.html

 

MyBatis – 마이바티스 3 | 매퍼 설정

매퍼 설정 마이바티스 XML 설정파일은 다양한 설정과 프로퍼티를 가진다. 문서의 구조는 다음과 같다.: configuration properties 이 설정은 외부에 옮길 수 있다. 자바 프로퍼티 파일 인스턴스에 설정할

mybatis.org

 

 

 

👩‍🎓 정리
'All Element Are Null' 오류가 났을 때는 config 파일에 resultType을 제대로 설정했는지 확인하자!

 

 


ref.