본문 바로가기
SpringBoot/이론

[ Spring Boot ] JDBC 연결

by Hwanii_ 2023. 9. 19.
728x90

 

1. 개요

 

Spring 에서 JdbcTemplate 를 사용 했었다.

반복되는 로직에 사용 되는 템플릿 패턴을 사용한 개념 이였는데,

Spring Boot 에서 JDBC 연결을 위한 설정 방법을 정리.

 

참고 :

https://hwanii96.tistory.com/337

 

Spring JDBC

0. 그동안, Model 에서 DB와의 연결을 위해, JDBC 인터페이스를 구현 했었다. 기존 JDBC 코드 작업시, 로직이 반복 되거나, 유사함을 느꼈고, 이에 따라서, "반복되는 코드를 줄일 수 없을까 ?" 라는 생

hwanii96.tistory.com

 

2. Spring Boot 에서 JDBC 설정 하기

 

1)

먼저 Spring Starter Project 를 클릭.

 

 

2)

필요한 설정들을 진행 하고, Next 를 클릭.

 

 

3)

 

 

본인 자바 버전에 맞게 Spring Boot Version을 선택 하고,

 

Spring MVC 프로젝트를 위해 Spring Web 선택,

 

자동 getter / setter / toString 등을 만들어 주기 위한 Lombok 선택 (필요시)

 

JDBC 관련은 JDBC API 이다. 이것을 검색 하고 선택 하고,

 

본인이 사용할 DBMS에 맞게 Driver 을 찾아서 선택 하면 된다.

 

 

Oracle 도 있긴 하지만, 유료버전과 무료버전이 나뉘어져 있어서, 

이곳에서 하지 않고, gradle 설정 파일에서 라이브러리를 불러오는 식으로 하거나,

또는, Java Build Path 에 직접적으로 라이브러리를 추가 해서 사용 하면 된다.

 

본인은 MySQL을 사용할 예정이라 MySQL Driver 을 선택 하고 Finish 클릭.

 

4)

 

 

우하단에 로딩이 모두 끝나면, Package Explorer 에 프로젝트가 생성 되고 [boot] 라고 명시 되어 있다.

 

5)

 

application.properties 설정 파일에 아래와 같이 작성 한다.

 

 

특별히 MySQL의 설정을 건드리지 않았다면, username은 root 이고 password는 1234 이다.

 

9번째 라인의 localhost:3306/ 다음에 나오는 것은 생성한 (사용하려는) 데이터베이스 이름 이다.

 

이러면, 모든 설정은 끝.

 

6)

만약에 Oracle DBMS 를 사용 하고 싶으면, build.gradle 설정 파일에서 라이브러리를 추가 하면 된다.

 

 

이곳에 해당하는 라이브러리 주소를 찾아 작성 하면 된다.

 

3. IDE 에서 자세히 확인 하기

위의 설정을 정상적으로 했다면,

DAO 비즈니스 레이어에 해당하는 DAO 클래스 내부에서 JdbcTemplate 를 의존 주입 할 때 정상적으로 작동 한다.

 

 

정상적으로 되지 않은 경우 ?

 

 

위와 같이 컴파일 에러가 발생 한다.

 

++

 

기존에 JdbcTemplate를 사용 해서 CRUD 메서드 중 Read에 해당 하는 메서드를 작성 했을 때,

 

query() 메서드 또는, queryForObject() 메서드는 RowMapper() 를 필요로 했었다.

 

따라서, RowMapper 클래스를 직접 만들어서 사용 했었는데,

 

Spring Boot 에서는 RowMapper 를 기본 제공 해줘서 그냥 사용 하면 된다.

 

public List<MemberDTO> selectAll(MemberDTO mDTO) {	//	회원 목록 전체 출력.

		return jdbcTemplate.query(SELECTALL, new BeanPropertyRowMapper<MemberDTO>(MemberDTO.class));
	}

 

public MemberDTO selectOne(MemberDTO mDTO) {	//	회원 한명 출력.
		
		
		try {
			if(mDTO.getSk().equals("LOGIN")) {
				
				Object[] args = { mDTO.getMid(), mDTO.getMpw() };
				
				return jdbcTemplate.queryForObject(SELECTONE_LOGIN, args, new BeanPropertyRowMapper<MemberDTO>(MemberDTO.class));
			}
			else if(mDTO.getSk().equals("INFO")) {
				
				Object[] args = { mDTO.getMid() };
				
				return jdbcTemplate.queryForObject(SELECTONE_INFO, args, new BeanPropertyRowMapper<MemberDTO>(MemberDTO.class));
			}
		} catch (Exception e) {	//	EmptyResultDataAccessException 예외 캐치.
        	e.printStackTrace();
            return null;
		}
		return null;
	}

 

이런식으로 사용 하면 된다.

 

4. BeanPropertyRowMapper ?

 

BeanPropertyRowMapper 생성자는 아래와 같다.

 

 

BeanPropertyRowMapper 는

스프링 프레임워크 에서 제공하는 JDBC 템플릿을 사용할 때 주로 활용되는 클래스 중 하나 이다.

 

BeanPropertyRowMapper 클래스는 JDBC 결합과 집합을 자바 객체로 매핑 할 때 사용 된다.

 

주로 사용 되는 메서드는 query() 메서드 이고, 알다시피 이 query() 메서드는

SQL 쿼리문을 실행하고 그 결과를 자바 객체로 변환해주는 역할을 한다.

 

BeanPropertyRowMapper 는 이 결과를 어떻게 매핑할지를 정의하는데 사용 된다고 보면 된다.

 

BeanPropertyRowMapper의 상세 기능

 

1) SQL 쿼리문의 결과 집합에서 각 행을 자바 객체로 변환.

 

2) 각 칼럼의 값을 자바 객체의 프로퍼티에 매핑. 프로퍼티의 이름은 칼럼명과 일치 해야 한다.

 

3) 자바 객체의 생성과 초기화를 담당. 위에서는 MemberDTO 클래스의 객체 생성 및 초기화를 담당 한다.

 

그래서,

 

new BeanPropertyRowMapper<MemberDTO>(MemberDTO.class)

 

위의 코드를 보면, BeanPropertyRowMapper 가

매핑 설정을 위해서 (MemberDTO.class) 를 작성함으로써, 클래스의 정보를 제공 해주고 있다.

 

이곳에 클래스의 정보를 제공 한다고 해서 객체화가 되는건 아니고,

 

객체화는 매핑 작업을 수행 할 때 내부적으로 이루어진다고 생각 하면 된다.

 

만약 기본 제공 해주는 BeanPropertyRowMapper 을 사용 하고 싶지 않으면 ?

 

XxxRowMapper 클래스를 직접 생성 해서 사용 하면 된다.

 

 

이런식으로 RowMapper 인터페이스를 구현한 XxxRowMapper 클래스를 생성 하면 된다.

반응형