[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 |