* 오라클 연결 방식
- JDBC / mybatis
* JDBC 연결 방식
- 자바와 스프링 간의 연결, 스프링에서 자바를 이용해서 DB에 있는 정보를 꺼내오는 것
- JSP JDBC vs 스프링 JDBC
-> JSP의 JDBC 프로그래밍은 connection 객체, preparedstatements 객체, resultset 객체를 연결 시마다 만들고 연결이 끝나면 다시 .close() 메서드를 이용해 해제하는 과정의 반복. 스프링의 JDBC 프로그래밍은 이와 달리 컴퓨터가 자원 생성과 회수를 모두 자동으로 해줌.
* JDBC 사용을 위한 환경설정 (pom.xml)
1. Spring JDBC, Connection Pool, OJDBC 관련 의존성 설정
- Spring JDBC : 스프링과 자바 간에 자료를 주고 받을 수 있게 해주는 드라이브
- Connection Pool : JSP에서 DAO를 접속할 때마다 객체를 하나씩 생성하면 메모리에 무리가 가기 때문에 스프링에서는
Connection 객체를 풀 속에 저장해놓고 필요할 때마다 풀에서 커넥션을 가져와 쓰고 반납하는 구조
- OJDBC : JDBC가 오라클이랑 통신할 수 있게 해주는 패키지
OJDBC 의존성 주입 시에 오류가 발생할 수 있는데 저장소 추가해주면 오류 사라짐
2. OJDBC 사설 저장소 추가
- OJDBC를 스프링에서 정식으로 지원하지 않기 때문에 하단에 사설 저장소 주소 추가
- 사설 저장소이기 때문에 오류가 발생하면 저장소 주소를 변경해줘야함
<!-- Spring JDBC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- Connection Pool -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- Oracle JDBC Driver -->
<dependency> <!-- 에러 발생 이유: 저장소를 인식 못했기 때문, 따라서 저장소를 추가해줄것임 -->
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>12.1.0.1</version>
</dependency>
<!-- Repository Setting : OJDBC 인식을 위한 추가 태그 -->
<repositories>
<repository>
<id>oracle</id>
<name>ORACLE JDBC Repository</name>
<url>http://maven.jahia.org/maven2</url>
</repository>
</repositories>
* DB 접속 관련 정보 설정
1. properties 파일 생성 (드라이버, url, id, pw 관련 정보 입력)
- src/main/resources 아래에 database 폴더 만든 후 내부에 jdbc.properties 파일 생성
- url은 SQLDeveloper 참고, 다른 컴퓨터에서 변경될 수 있음
- 문장에 공백이 포함되면 드라이브를 인식하지 못하므로 주의하자
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver // 고정
jdbc.url=jdbc:oracle:thin:@localhost:1521:xe // 유동
jdbc.username=scott // 유동
jdbc.password=tiger // 유동
2. DB 의존 관계 주입 (root_context.xml)
2-1) DB 정보가 적혀있는 properties 파일 스캔
- <context:property-placeholder location="classpath:database/jdbc.properties" />
- namespace에서 <context> 체크하면 자동 추가
- 두 개 이상의 파일도 가능
- property-placeholder의 기본 경로는 src/main/resources로 고정, 따라서 폴더 경로로 바로 적어주기
2-2) DataSource 객체에 DB 정보 주입
- Connection pool의 역할 (값을 미리 저장해두고 필요할 때마다 쓸 수 있게해줌)
- 내부 클래스들은 어노테이션을 사용할 수 없고, xml을 통한 의존성 주입을 해야함 -> 그래서 xml에 수동으로 적어준거임
- 드라이버 + 접속까지 담당
2-3) JdbcTemplate 객체에 DataSourece 객체 주입
- 쿼리문을 전달해주는 객체
- 스프링 JDBC에서만 사용하고 mybatis에서는 쓰이지 않음
* JDBC 쿼리문 유형
1) multirow
- select문으로 두 줄 이상의 자료를 리턴 (무조건 리턴하는 것은 아니고, 여러 줄 출력할 가능성이 클 경우)
- JDBCTemplate의 query() 메서드 사용
- List query(String sql, RowMapper<T> rowMapper, 파라미터1,2,3...)
-> RowMapper<T> rowMapper를 익명 클래스 형태로 넣어줌
-> 파라미터는 sql 구문에서 ? 부분을 의미함
- 검색 결과 여러 개를 리스트에 저장하여 리턴함
2) singlerow
- select문으로 한 줄 아니면 0줄
- JDBCTemplate의 queryForObject() 메서드 사용
- Object queryForObject(String sql, Class<T> requiredType, 파라미터1,2,3...)
-> Class<T> requiredType에는 sql 구문 실행 후 반환 타입을 적어준다 (ex - Integer.class)
-> 파라미터는 sql 구문에서 ? 부분을 의미함
- 검색 결과를 객체 하나에 매핑하여 리턴함
3) 리턴 없음
- JDBCTemplate의 update() 메서드 사용
- INSERT , UPDATE , DELETE 명령어를 처리
- public int update(String sql, 파라미터1,2,3...)
* RowMapper 인터페이스
- 미리 만들어두면 객체를 리턴하는 경우에 모두 사용할 수 있음
- while(rs.next()) { } // rs에 저장된 VO 하나(=한 줄)의 값을 저장, 계속 돌면서 계속 저장
-> JSP에서 while문이 하는 일을 직접 해주는 인터페이스, 스프링 자체에서 처리해줌
- ResultSet에서 값을 가져와 원하는 타입으로 매핑할 때 사용
public interface RowMapper {
Object mapRow(ResultSet rs, int rowNum) throws SQLException;
} // resultSet에 저장된 다중 데이터를 조회할 때 ArrayList형태로 구성하기 위해 사용
'SPRING > Configuration' 카테고리의 다른 글
게시판 - 프로젝트 환경설정 및 DB 연결 (0) | 2020.09.07 |
---|---|
Eclipse & Oracle 연결 - mybatis 설정 (0) | 2020.09.02 |
[스프링] 한글 인코딩 필터 설정 (0) | 2020.08.27 |
[스프링] legacy 프로젝트 환경설정 (0) | 2020.08.22 |
[스프링] 환경설정 : JDK / Eclipse / Tomcat / STS (0) | 2020.08.22 |