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();

}

}






Posted by netyhobby
,