1. STS에서 데이터베이스 연동 설정
1) pom.xml 설정 추가
1) 먼저 오라클에서 제공해주는 ojdbc6에 관한 설정 추가
<!-- ojdbc6 설정 추가 -->
<repositories>
<repository>
<id>codelds</id>
<url>http://code.lds.org/nexus/content/groups/main-repo</url>
</repository>
</repositories>
위와 같이 태그를 추가해준다.
2) 스프링의 JDBC 모듈 추가.
<!-- Spring jdbc 모듈 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring-framework.version}</version>
</dependency>
3) JDBC 드라이버 추가
<!-- Oracle 11g 라이브러리 사용 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.3</version>
</dependency>
2) 오라클 연결
Windows-Data Source Explorer에서 New로 연결.
Oracle 선택 후, jre에서 ojdbc6 선택. SID, Host, user name, password를 각자 자기 설정에 맞게 입력.
방법은 이클립스 때와 동일하다.
3) src/main/resources에 New-SQL 생성
SQL 창이 뜨면 접속 후 SQL문 입력.
drop table baseballTeam;
create table baseballTeam(
team_id number(2) primary key,
team_name varchar2(50) not null
);
select * from baseballTeam;
insert into baseballTeam values(1, '삼성');
insert into baseballTeam values(2, 'LG');
insert into baseballTeam values(3, '넥센');
insert into baseballTeam values(4, '두산');
insert into baseballTeam values(5, '롯데');
insert into baseballTeam values(6, 'KIA');
insert into baseballTeam values(7, 'SK');
insert into baseballTeam values(8, 'NC');
insert into baseballTeam values(9, '한화');
insert into baseballTeam values(10, 'KT');
2. 클래스 생성
1) Team DTO
package spring.jdbc.dto;
public class Team {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
3) JDBC 프로퍼티 생성
src/main/resources에 config 폴더 만든 뒤 jdbc.properties란 파일 만든다.
(자바, 서블릿/JSP에서 설정 관련 확장자는 properties)
내용은 다음과 같이 담는다.
jdbc.driver=oracle.jdbc.dirver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:xe
jdbc.username=hr
jdbc.password=tiger
이 파일을 스프링에서 인식시키려면 해당 프로젝트의 설정 파일(xml)에 다음과 같이 추가해준다.
4) 설정 파일
<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- jdbc 속성을 저장한 파일을 대상으로 빈 생성 -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<value>classpath:config/jdbc.properties</value>
</property>
</bean>
<!-- jdbc 프로퍼티를 실질적으로 연동하여 처리하는 설정 -->
<!-- 1. Data Source : Oracle DB 테이블 연동(JDBC방식) -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<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>
<!-- 2. JdbcTemplate 빈 객체 생성(dataSource 이용) -->
<!-- 위에서 생성한 dataSource 객체를 jdbcTemplate에 알려줘야 함. -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="dataSource"/>
</bean>
<bean id="menu" class="spring.jdbc.view.MenuUi"
p:selectTeam-ref = "selectTeam"/>
<bean id="selectTeam" class="spring.jdbc.view.TeamService"
p:teamDAO-ref = "teamDAO"/>
<bean id="teamDAO" class="spring.jdbc.dao.TeamDAOImpl"
p:jdbcTemplate-ref="jdbcTemplate"/>
</beans>
2) DAO 인터페이스
package spring.jdbc.dao;
import java.util.List;
import spring.jdbc.dto.Team;
public interface TeamDAO {
// Team이란 이름의 자바빈 타입으로 메서드를 정의
List<Team> getTeamList();
}
3) DAO 클래스
실질적인 데이터베이스에서 데이터를 꺼내오는 역할
package spring.jdbc.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import spring.jdbc.dto.Team;
public class TeamDAOImpl implements TeamDAO{
private JdbcTemplate jdbcTemplat;
private List<Team> list = null;
public void setJdbcTemplate(JdbcTemplate jdbcTemplat){
this.jdbcTemplat = jdbcTemplat;
}
@Override
public List<Team> getTeamList() {
String sql = "select * from baseballTeam order by team_id asc";
return list = jdbcTemplat.query(sql, new RowMapper<Team>(){
// 인터페이스인 RowMapper 객체를 생성하려면 인터페이스 안의 추상메서드를 {} 안에 넣어준다.
@Override // mapRow는 읽어온 데이터를 입력으로 전달하기 위한 메서드
public Team mapRow(ResultSet arg0, int arg1) throws SQLException {
Team team = new Team(); // 읽어온 데이터를 자바빈에 저장
team.setId(arg0.getInt("team_id"));
team.setName(arg0.getString("team_name"));
return team;
}
});
// return list;
}
}
4) DAO 안의 getTeamList 메서드를 서비스 영역에서 호출하는 TeamService 클래스
(MVC 패턴에서 Action에 해당하는 클래스)
package spring.jdbc.view;
import java.util.List;
import spring.jdbc.dao.TeamDAO;
import spring.jdbc.dto.Team;
//DAO 안의 getTeamList 메서드를 서비스 영역에서 호출 위한 부분
//DAO 객체 주입받는 방식을 잘 볼 것
public class TeamService {
// DAO의 메서드 호출 위한 참조변수와 setter 메서드
private TeamDAO teamDAO;
public void setTeamDAO(TeamDAO teamDAO){
this.teamDAO = teamDAO;
}
public void teamList(){ // 10개 구단의 list를 리스트로 받아옴
List<Team> list = teamDAO.getTeamList(); // DB를 가져오는 DAO의 메서드를 호출
// 전체 레코드 목록 보기
System.out.println("************");
System.out.println("구단ID 구단명");
for(Team team : list){
System.out.printf("%d %s\n", team.getId(), team.getName());
}
System.out.println("************");
}
}
5) 실행 클래스
MVC 패턴에서 컨트롤러 영역처럼 구성
package spring.jdbc.view;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MenuUi {
private TeamService selectTeam;
public void setSelectTeam(TeamService selectTeam){
this.selectTeam = selectTeam;
}
private void execute(int num){ // 아래 show menu 메서드에서 실행할 메서드
switch(num){
case 1:
System.out.println("프로그램을 종료합니다.");
System.exit(0); // 프로그램을 빠져나가며 완전히 종료하는 명령
break;
case 2:
selectTeam.teamList();
break;
default:
break;
}
}
public void showMenu() throws NumberFormatException, IOException{ // 메인 메서드 내부에서 사용할 메서드
while(true){
System.out.println("=================");
System.out.println("1. 프로그램 종료");
System.out.println("2. KBO 구단보기");
System.out.println("=================");
System.out.print("번호 입력 후 Enter : ");
BufferedReader keyboard =
new BufferedReader(new InputStreamReader(System.in));
int number = Integer.parseInt(keyboard.readLine());
execute(number);
}
}
public static void main(String[] args) throws NumberFormatException, IOException {
AbstractApplicationContext context =
new ClassPathXmlApplicationContext("applicationContext.xml");
context.registerShutdownHook();
MenuUi menu = context.getBean("menu", MenuUi.class);
menu.showMenu();
context.close();
}
}
' Spring Framework' 카테고리의 다른 글
Spring MVC 세팅 (0) | 2016.04.05 |
---|---|
Spring JDBC 탬플릿 이용: KBO 구단 조회/추가/수정/삭제 (완성) (0) | 2016.04.05 |
Spring 과 DB (0) | 2016.04.04 |
@Aspect 어노테이션을 이용한 AOP (0) | 2016.04.01 |
AOP라는 엘리먼트를 이용해 AOP 설정을 하는 방법 (0) | 2016.04.01 |