게시판 모듈을 생성하면서 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.
- https://jaehun2841.github.io/2018/12/30/2018-12-30-mybatis-returnInstanceForEmptyRow/#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0
- https://www.ibm.com/docs/ko/db2/11.1?topic=source-connecting-data-using-datasource-interface
- https://fvor001.tistory.com/30
- https://kookyungmin.github.io/server/2018/08/13/spring_06/
'DB' 카테고리의 다른 글
[MySQL] 실행계획 알아보기 (1) | 2023.01.24 |
---|---|
[DB] ORM(Object Relational Mapping) 개념과 장/단점 (0) | 2022.09.12 |
[MySQL] MySQL8 기본 캐릭터 셋 'utf8mb4' (0) | 2022.03.10 |
[MariaDB] 계층형 쿼리(Hierarchical Queries) (0) | 2022.03.07 |
[Oracle] 계층형 쿼리(Hierarchical Queries) (0) | 2022.03.04 |