블로그를 변경하였습니다.

해당 블로그는 더 이상 추가 포스팅 없을 예정입니다.

👉 새 블로그 방문하기


[Spring] JDBC

2021. 6. 18. 22:25
728x90
반응형

기존방식 => JDBCUtil 클래스와 데이터베이스에 실질적으로 접근하는 DAO클래스 생성하여 사용

 

스프링의 JdbcTemplate 클래스 사용

GoF디자인 패턴 중 템플릿 메서드 패턴이 적용된 클래스.

 

GoF(Gang of Four)에서는 23가지 디자인 패턴을 3가지 유형으로 분류

1. Creational Pattern
    객체를 생성하는데 관련된 패턴들객체가 생성되는 과정의 유연성을 높이고 코드의 유지를 쉽게 함
2. Structural Pattern
    프로그램 구조에 관련된 패턴들프로그램 내의 자료구조나 인터페이스 구조 등 프로그램의 구조를 설계하는데 활용할 수 있는 패턴들
3. Behavioral Pattern
    반복적으로 사용되는 객체들의 상호작용을 패턴화 해놓은 것들

 

 

 

스프링 JDBC를 사용하기 위한 라이브러리 추가

<!-- Spring JDBC -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
<!-- DBCP : DataBase Connection Pool -->
		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
			<version>1.4</version>
		</dependency>

 

XML파일에 DataSource 설정

<!-- DB 연결 -->

	<context:property-placeholder location="classpath:config/database.properties" />

	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
	</bean>

config패키지를 만들고 그 안에 database.properties파일을 만들어서 DB에 관련된 정보를 기입한다.

jdbc.driver = oracle.jdbc.driver.OracleDriver
jdbc.url = jdbc:oracle:thin:@127.0.0.1:1521:XE
jdbc.username = spring_test
jdbc.password = ekgns00

EL표기법 처럼 proerty 내부에 해당 명을 기입

 

해당 properties파일을 읽어내기 위한

<context:property-placeholder location="classpath:config/database.properties" />

 


JdbcTemplate 메서드

 

1. update( )

=> INSERT / UPDATE / DELETE 구문 처리

예시)
// 게시글 등록
	public void insertBoard(BoardVO vo) {
		jdbcTemplate.update(BOARD_INSERT,vo.getTitle(),vo.getWriter(),vo.getContent());
	}// insertBoard END

해당 실습에서는 제목, 작성자, 본문만 입력받아서 DB에 저장된다.

 

2. queryForInt( )

=> SELECT 구문 처리 // 정수값으로 리턴

3.quertForObject( )

=> SELECT 구문 처리 / 실행 결과를 특정 자바 객체로 매핑하여 리턴받을때 사용

예시)
// 글 상세보기
	public BoardVO detailBoard(BoardVO vo) {
		Object[] args = {vo.getSeq()};
		return jdbcTemplate.queryForObject(BOARD_GET, args, new BoardRowMapper());
	}// detailBoard END

검색결과가 없거나 2개이상이면 에러발생

** quertForObject() -> RowMapper 클래스가 필요!!

예시)
public class BoardRowMapper implements RowMapper<BoardVO> {

	@Override
	public BoardVO mapRow(ResultSet rs, int rowNum) throws SQLException {
		BoardVO board = new BoardVO();
		board.setSeq(rs.getInt("seq"));
		board.setTitle(rs.getString("title"));
		board.setWriter(rs.getString("writer"));
		board.setContent(rs.getString("content"));
		board.setRegDate(rs.getDate("regDate"));
		board.setCnt(rs.getInt("cnt"));
		
		return board;
	}

}

RowMapper 클래스에서 mapRow 메서드를 통하여 검색했을때 어떤 정보를 저장할 지 설정한다.

 

4.query( )

=> SELECT 문의 실행결과가 목록일때 사용 (List<>형태로 저장되기 때문에 여러개 저장 가능) 

예시)
public List<BoardVO> getBoardList(BoardVO vo) {
		return jdbcTemplate.query(BOARD_LIST, new BoardRowMapper());
	}// getBoardList END

 

JDBCTemplate XML파일 설정( Bean태그 등록)

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
	<property name="dataSource" ref="dataSource"></property>
</bean>

//dataSource 는 아까 설정한 데이터베이스 접속 코드

 


728x90
반응형

'개발노트 > Spring' 카테고리의 다른 글

[Spring] JPA 관련 레퍼런스  (0) 2021.07.05
[Spring] Transaction  (0) 2021.06.21
[Spring] IoC(inversion of Control)  (0) 2021.06.18
[Spring] AOP(Aspect Oriented Programming)  (0) 2021.06.17
[Spring] src/main/resources 구조  (0) 2021.06.15

BELATED ARTICLES

more