Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Java
- 배열정렬
- 자바 계산기
- 알고리즘
- 자바GUI
- 계산기GUI
- 자바 #java #이클립스 #eclipse #switch #switch문 #사칙연산 #계산기 #calculator #간단한계산기
- Eclipse
- 숫자정렬
- 이클립스 #이클립스단축키 #자바 #자바단축키
- GUI
- 오름차순정렬
- 계산기
- Spring
- 스프링
- Swing
- 어노테이션
- 자바알고리즘
- 이클립스
- 버블소트
- 자바
- 버블정렬
- MVC
- 내림차순정렬
- annotation
Archives
- Today
- Total
온 코딩
[Spring] 오라클 DB 연결 - JdbcDaoSupport 상속 / JdbcTemplate 본문
복습 ARCHIVE/모델별 프로젝트
[Spring] 오라클 DB 연결 - JdbcDaoSupport 상속 / JdbcTemplate
SummerON 2021. 6. 17. 13:28기본 준비
pom.xml파일에 jdbc, dbcp dependency 추가 후 확인
<!-- SpringJDBC -->
<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>
꼭 maven이 잘 임포트 되었는지 확인한다. (Library>Maven Dependency)
1. JdbcDaoSupport 상속
BoardDAOSpring
JdbcDaoSupport를 상속 받고 관련 된 함수인
setSuperDataSource(DataSource dataSource){ }와 getJdbcTemplate()을 사용하여 데이터에 접속한다.
import java.util.List;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import com.hhw.biz.board.BoardVO;
@Repository
public class BoardDAOSpring extends JdbcDaoSupport {
// SQL 명령어 상수 - Mybitis 연계가 쉽게 / 유지보수를 편하게
private final String BOARD_INSERT = "insert into board (seq, title, writer, content) values ((select nvl(max(seq), 0)+1 from board),?,?,?)";
private final String BOARD_UPDATE = "update board set title=?, content=? where seq=?";
private final String BOARD_DELETE = "delete board where seq=?";
private final String BOARD_GET = "select * from board where seq=?";
private final String BOARD_LIST = "select * from board order by seq desc";
public BoardDAOSpring() {
}
@Autowired
public void setSuperDataSource(DataSource dataSource){
super.setDataSource(dataSource);
}
public void insertBaord(BoardVO vo) {
System.out.println("Spring JDBC insertBoard 기능처리");
getJdbcTemplate().update(BOARD_INSERT,vo.getTitle(),vo.getWriter(),vo.getContent());
}
public void updateBaord(BoardVO vo) {
System.out.println("JDBC updateBoard 기능처리");
getJdbcTemplate().update(BOARD_UPDATE,vo.getTitle(),vo.getContent(),vo.getSeq());
}
public void deleteBaord(BoardVO vo) {
System.out.println("JDBC deleteBoard 기능처리");
getJdbcTemplate().update(BOARD_DELETE,vo.getSeq());
}
public BoardVO getBaord(BoardVO vo) {
System.out.println("JDBC getBoard 기능처리");
Object[] args = {vo.getSeq()};
return getJdbcTemplate().queryForObject(BOARD_GET,args, new BoardRowMapper());
}
public List<BoardVO> getBaordList(BoardVO vo) {
System.out.println("JDBC getBoardList 기능처리");
return getJdbcTemplate().query(BOARD_LIST, new BoardRowMapper());
}
BoardRowMapper.java
Jdbc를 사용하려면 rs값을 반환 받을 수 있게 만드는 RowMapper가 필요하다.
RowMapper<VO>를 구현하는 클래스를 만들어사용해준다.
package com.hhw.biz.board.impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
import com.hhw.biz.board.BoardVO;
/** JdbcTemplate의 메서드 중 queryForObject() /query()메서드에 대한 반환 타입으로 사용
* queryForObject() : 검색 결과가 1개일 경우(결과가 없거나, 2개 이상이면 예외처리)
* query() : 검색 결과가 여러 개일 경우 (검색 결과의 갯수 만큼 mapRow()가 자동 호출 됨 =>List에 저장
* **/
public class BoardRowMapper implements RowMapper<BoardVO> {
public BoardRowMapper() {
}
/** mapRow()메서드는 SQL 쿼리 실행 후, 스프링 컨테이너가 자동 호출
* ResultSet rs : sql쿼리 실행 결과
* int rowNum : sql 실행 결과에 대한 레코드 수
* **/
@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;
}
}
BoardServiceImpl.java
package com.hhw.biz.board.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.hhw.biz.board.BoardService;
import com.hhw.biz.board.BoardVO;
@Service("boardService") //service 구현 받은데 붙는 어노테이션
public class BoardServiceImpl implements BoardService {
@Autowired
private BoardDAOSpring boardDAO;
public BoardServiceImpl() {
}
@Override
public void insertBaord(BoardVO vo) {
boardDAO.insertBaord(vo);
}
@Override
public void updateBaord(BoardVO vo) {
boardDAO.updateBaord(vo);
}
@Override
public void deleteBaord(BoardVO vo) {
boardDAO.deleteBaord(vo);
}
@Override
public BoardVO getBaord(BoardVO vo) {
return boardDAO.getBaord(vo);
}
@Override
public List<BoardVO> getBoardList(BoardVO vo) {
return boardDAO.getBaordList(vo);
}
}
applicationContext.xml
DataSource를 설정하는 방법에는 직접 xml문서에 경로를 지정하는 방법이 있고
또, .properties파일을 읽어서 경로를 지정하는 방법이 있다.
보통 여러명이 사용해야하는 경우 경로/아이디/비밀번호와 같이 바뀌는 부분들은 하드코드로 작성하지 않고 따로 .properties문서로 관리한다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<context:component-scan base-package="com.hhw.biz"></context:component-scan>
<!-- DataSource 설정 -->
<!-- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:XE"></property>
<property name="username" value="hhw"></property>
<property name="password" value="1234"></property>
</bean> -->
<!-- DataSource Configuration Properties 파일 이용 -->
<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>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
</beans>
JdbcTemplate 임포트
위의 프로젝트에서 DAO쪽과 Context쪽만 수정하면 됨
BoardDAOSpring
package com.hhw.biz.board.impl;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import com.hhw.biz.board.BoardVO;
/** JdbcTemplate 사용하기 **/
@Repository
public class BoardDAOSpring {
@Autowired
private JdbcTemplate jdbcTemplate;
// SQL 명령어 상수 - Mybitis 연계가 쉽게 / 유지보수를 편하게
private final String BOARD_INSERT = "insert into board (seq, title, writer, content) values ((select nvl(max(seq), 0)+1 from board),?,?,?)";
private final String BOARD_UPDATE = "update board set title=?, content=? where seq=?";
private final String BOARD_DELETE = "delete board where seq=?";
private final String BOARD_GET = "select * from board where seq=?";
private final String BOARD_LIST = "select * from board order by seq desc";
public BoardDAOSpring() {
}
/** CRUD 기능 상세 구현 메서드들 **/
/** 글 등록 **/
public void insertBaord(BoardVO vo) {
System.out.println("Spring JDBC insertBoard 기능처리");
jdbcTemplate.update(BOARD_INSERT,vo.getTitle(),vo.getWriter(),vo.getContent());
}
/** 글 수정 **/
public void updateBaord(BoardVO vo) {
System.out.println("JDBC updateBoard 기능처리");
jdbcTemplate.update(BOARD_UPDATE,vo.getTitle(),vo.getContent(),vo.getSeq());
}
/** 글 삭제 **/
public void deleteBaord(BoardVO vo) {
System.out.println("JDBC deleteBoard 기능처리");
jdbcTemplate.update(BOARD_DELETE,vo.getSeq());
}
/** 글 상세 조회 **/
public BoardVO getBaord(BoardVO vo) {
System.out.println("JDBC getBoard 기능처리");
Object[] args = {vo.getSeq()};
return jdbcTemplate.queryForObject(BOARD_GET,args, new BoardRowMapper());
}
/** 글 목록조회 **/
public List<BoardVO> getBaordList(BoardVO vo) {
System.out.println("JDBC getBoardList 기능처리");
return jdbcTemplate.query(BOARD_LIST, new BoardRowMapper());
}
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<context:component-scan base-package="com.hhw.biz"></context:component-scan>
<!-- DataSource Configuration Properties 파일 이용 -->
<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>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<!-- Spring JDBC :JdbcTemplate 메서드 사용을 위한 등록 / JdbcDaoSupport 상속 받을 경우 필요 ㄴㄴ-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>
'복습 ARCHIVE > 모델별 프로젝트' 카테고리의 다른 글
[Spring] AOP - 관심분리, 포인트컷, 어드바이스, 위빙, 애스팩트 + 표현식 모음 (0) | 2021.06.17 |
---|---|
[Spring]오라클 DB연결 jdbcTemplate 메서드 모음 (0) | 2021.06.17 |
[Spring] 오라클 DB 연결 - JDBCUtil 사용 (0) | 2021.06.16 |
[Spring] DI 설정 - 어노테이션 (0) | 2021.06.16 |
[Spring] STS - 기본 설정 (0) | 2021.06.15 |
Comments