02일차_DI테스트

Spring 2015. 6. 30. 14:41

--------------------------------
DI 테스트2
- 콘솔 프로젝트
- 오라클에 대해서 로컬 서버와 원격 서버를 동시 사용할 수 있도록 설정.

1. 프로그램 구성
//Member.java -> 자료형 클래스
//DAO.java -> 인터페이스
//LocalDAO.java -> 클래스. DAO 인터페이스 구현.
//RemoteDAO.java -> 클래스. DAO 인터페이스 구현.
//MemberDAO.java -> DAO 객체의 list() 메소드 호출 클래스. DAO 인터페이스를 구현한 클래스에 대해서 의존 관계 설정.
//Main.java -> main() 메소드
//applicationContext.xml -> 스프링 환경 설정 파일. (src 폴더 하위에 생성)

2. 프로젝트 환경 설정
- Java Project 생성
- 프로젝트 선택>Build Path>Configure Build Path...>Libraries탭 선택>Add External JARS... 선택
- 아래 .jar 파일 선택
경로명1 : C:\spring-docs\spring-framework-3.0.2.RELEASE\dist
파일명 :
org.springframework.asm-3.0.2.RELEASE.jar
org.springframework.beans-3.0.2.RELEASE.jar
org.springframework.context-3.0.2.RELEASE.jar
org.springframework.core-3.0.2.RELEASE.jar
org.springframework.expression-3.0.2.RELEASE.jar

경로명2 : C:\spring-dependencies\org.apache.commons\com.springsource.org.apache.commons.logging\1.1.1
파일명 :
com.springsource.org.apache.commons.logging-1.1.1.jar


ojdbc6.jar 추가할 것.

3. 데이터베이스 준비
CREATE TABLE memberList(
 mid NUMBER  --PK
 ,name VARCHAR2(30)
 ,telephone VARCHAR2(30)
);

CREATE SEQUENCE memberListSeq;

ALTER TABLE memberList
 ADD CONSTRAINT memberList_mid_pk PRIMARY KEY(mid);

INSERT INTO memberList (mid, name, telephone)
 VALUES (memberListSeq.nextval, 'kim', '010-123-1234');
COMMIT;

SELECT mid, name, telephone
 FROM memberList
 ORDER BY mid;

SELECT COUNT(mid) AS count  FROM memberList;

4. 프로그램 소스 코드
//Member.java -> 자료형 클래스
package com.test;

public class Member {
 
 private String mid, name, telephone ;

 public String getMid() {
  return mid;
 }

 public void setMid(String mid) {
  this.mid = mid;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public String getTelephone() {
  return telephone;
 }

 public void setTelephone(String telephone) {
  this.telephone = telephone;
 }

}

 

 


//DAO.java -> 인터페이스
package com.test;

import java.sql.SQLException;
import java.util.ArrayList;

public interface DAO {
 
 public ArrayList<Member> list() throws SQLException, ClassNotFoundException;
 
}

 

 


//LocalDAO.java -> 클래스. DAO 인터페이스 구현.
package com.test;

import java.sql.*;
import java.util.ArrayList;

public class LocalDAO implements DAO {

 @Override
 public ArrayList<Member> list() throws SQLException, ClassNotFoundException {
  ArrayList<Member> result = new ArrayList<Member>();
  
  Class.forName("oracle.jdbc.driver.OracleDriver");
  String url = "jdbc:oracle:thin:사용자아이디/패스워드@localhost:1521:xe";
  Connection conn = DriverManager.getConnection(url);
  
  String sql = "SELECT mid, name, telephone FROM memberList ORDER BY mid";
  PreparedStatement pstmt = conn.prepareStatement(sql);
  ResultSet rs = pstmt.executeQuery(sql);
  while(rs.next()) {
   Member member = new Member();
   member.setMid(rs.getString("mid"));
   member.setName(rs.getString("name"));
   member.setTelephone(rs.getString("telephone"));
   result.add(member);
  }
  rs.close();  
  pstmt.close();
  conn.close();
  
  return result;
 }

}

 

 

 

//RemoteDAO.java -> 클래스. DAO 인터페이스 구현.
package com.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class RemoteDAO implements DAO {

 @Override
 public ArrayList<Member> list() throws SQLException, ClassNotFoundException {
  ArrayList<Member> result = new ArrayList<Member>();
  
  Class.forName("oracle.jdbc.driver.OracleDriver");
  String url = "jdbc:oracle:thin:사용자아이디/패스워드@아이피주소:1521:xe";
  Connection conn = DriverManager.getConnection(url);
  
  String sql = "SELECT mid, name, telephone FROM memberList ORDER BY mid";
  PreparedStatement pstmt = conn.prepareStatement(sql);
  ResultSet rs = pstmt.executeQuery(sql);
  while(rs.next()) {
   Member member = new Member();
   member.setMid(rs.getString("mid"));
   member.setName(rs.getString("name"));
   member.setTelephone(rs.getString("telephone"));
   result.add(member);
  }
  rs.close();  
  pstmt.close();
  conn.close();  
  
  return result;
 }

}

 

 


//MemberDAO.java -> DAO 객체의 list() 메소드 호출 클래스. DAO 인터페이스를 구현한 클래스에 대해서 의존 관계 설정.
package com.test;

public class MemberDAO {
 
 private DAO dao;
 
 public void setDao(DAO dao) {
  this.dao = dao;
 }
 
 public void list() {
  try {
   
   for (Member member : dao.list()) {
    System.out.printf("%s %s %s %n"
      , member.getMid()
      , member.getName()
      , member.getTelephone());
   }
    
  }catch(Exception e){
   e.printStackTrace();
  }
 }
 

}

 

 


//Main.java -> main() 메소드
package com.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

 public static void main(String[] args) {
  
  ApplicationContext context
   = new ClassPathXmlApplicationContext("applicationContext.xml");
  MemberDAO dao
   = context.getBean("memberDAO", MemberDAO.class);
  dao.list();

 }

}

 

 


//applicationContext.xml -> 스프링 환경 설정 파일. (src 폴더 하위에 생성)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
 
 <bean id="localDAO" class="com.test.LocalDAO"></bean>
 <bean id="remoteDAO" class="com.test.RemoteDAO"></bean>

 <bean id="memberDAO" class="com.test.MemberDAO">
  <property name="dao">
   <ref bean="remoteDAO" />
  </property>
 </bean>
 
</beans>

 


--------------------------------
DI 테스트3
- 콘솔 프로젝트
- 오라클에 대해서 로컬 서버와 원격 서버를 동시 사용할 수 있도록 설정.

1. 프로그램 구성
//Member.java -> 자료형 클래스
//Conn.java -> 인터페이스
//LocalConn.java -> 클래스. Conn 인터페이스 구현.
//RemoteConn.java -> 클래스. Conn 인터페이스 구현.
//MemberDAO2.java -> Conn 객체에 대해서 의존 관계 설정.
//Main.java -> main() 메소드
//applicationContext.xml -> 스프링 환경 설정 파일. (src 폴더 하위에 생성)

2. 프로그램 소스 코드
//Member.java -> 자료형 클래스
package com.test;

public class Member {
 
 private String mid, name, telephone ;

 public String getMid() {
  return mid;
 }

 public void setMid(String mid) {
  this.mid = mid;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public String getTelephone() {
  return telephone;
 }

 public void setTelephone(String telephone) {
  this.telephone = telephone;
 }

}

 

 

//Conn.java -> 인터페이스
package com.test;

import java.sql.*;

public interface Conn {
 
 Connection getConn()
   throws ClassNotFoundException, SQLException;
 void close() throws SQLException;

}

 

 

 


//LocalConn.java -> 클래스. Conn 인터페이스 구현.
package com.test;

import java.sql.*;

public class LocalConn implements Conn {

 //Connection(데이터베이스 연결) 객체 저장용 변수 선언
 private static Connection conn = null;
 
 //1. 데이터베이스 연결 과정
 public Connection getConn()
   throws ClassNotFoundException, SQLException {

  //Connection 객체가 생성되지 않은 경우에만
  //신규 객체를 생성한다. -> SingleTone
  if (conn == null) {
   //데이터베이스 연결 액션(로그인 과정)
   Class.forName("oracle.jdbc.driver.OracleDriver");
   String url = "jdbc:oracle:thin:username/password@211.63.89.83:1521:xe";
   conn = DriverManager.getConnection(url);
  }
    
  return conn;
 }
 
 
 //2. 데이터베이스 연결 종료 과정
 public void close() throws SQLException {
  if (conn != null) {
   conn.close();
  }
  conn = null; //멤버변수를 NULL 값으로 초기화
 }
 
 
}

 

 

 

//RemoteConn.java -> 클래스. Conn 인터페이스 구현.
package com.test;

import java.sql.*;

public class RemoteConn implements Conn {

 //Connection(데이터베이스 연결) 객체 저장용 변수 선언
 private static Connection conn = null;
 
 //1. 데이터베이스 연결 과정
 public Connection getConn()
   throws ClassNotFoundException, SQLException {

  //Connection 객체가 생성되지 않은 경우에만
  //신규 객체를 생성한다. -> SingleTone
  if (conn == null) {
   //데이터베이스 연결 액션(로그인 과정)
   Class.forName("oracle.jdbc.driver.OracleDriver");
   String url = "jdbc:oracle:thin:username/password@211.63.89.72:1521:xe";
   conn = DriverManager.getConnection(url);
  }
    
  return conn;
 }
 
 
 //2. 데이터베이스 연결 종료 과정
 public void close() throws SQLException {
  if (conn != null) {
   conn.close();
  }
  conn = null; //멤버변수를 NULL 값으로 초기화
 }
 
 
}

 

 

//MemberDAO2.java -> Conn 객체에 대해서 의존 관계 설정.
package com.test;

import java.sql.*;
import java.util.*;

public class MemberDAO2 {

 //커넥션 객체에 대한 의존 객체 주입 준비
 //LocalConn, RemoteConn 클래스의 객체
 private Conn conn;
 public void setConn(Conn conn) {
  this.conn = conn;
 }
 
 public ArrayList<Member> list()  {
  ArrayList<Member> result = new ArrayList<Member>();
  
  Connection conn = null;
  PreparedStatement pstmt = null;
  try {
   //Connection 객체 얻는 방법
   conn = this.conn.getConn();
   
   String sql = "SELECT mid, name, telephone FROM memberList ORDER BY mid";
   pstmt = conn.prepareStatement(sql);
   ResultSet rs = pstmt.executeQuery();
   while(rs.next()) {
    Member member = new Member();
    member.setMid(rs.getString("mid"));
    member.setName(rs.getString("name"));
    member.setTelephone(rs.getString("telephone"));
    result.add(member);    
   }
   rs.close();
   
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  } catch (SQLException e) {
   e.printStackTrace();
  }finally {
      try{
       if (pstmt != null) {
        pstmt.close();
       }
    //연결 종료시 conn.close(); 사용하면 안됨.
    this.conn.close();
      }catch(SQLException se){
         se.printStackTrace();
      }
  }   
  
  return result;
 }
}

 

 


//Main.java -> main() 메소드
package com.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

 public static void main(String[] args) {
  
  ApplicationContext context
   = new ClassPathXmlApplicationContext("applicationContext.xml");
  MemberDAO2 dao
   = context.getBean("memberDAO2", MemberDAO2.class);
  
  for (Member member : dao.list()) {
   System.out.printf("%s %s %s %n"
     , member.getMid()
     , member.getName()
     , member.getTelephone());
  }

 }

}

 

 

 

//applicationContext.xml -> 스프링 환경 설정 파일. (src 폴더 하위에 생성)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
 
 <bean id="localConn" class="com.test.LocalConn"></bean>
 <bean id="remoteConn" class="com.test.RemoteConn"></bean>
 <bean id="memberDAO2" class="com.test.MemberDAO2">
  <property name="conn">
   <ref bean="localConn"></ref>
  </property>
 </bean>
 
</beans>

 

 

--------------------------------
DI 테스트4
- 콘솔 프로젝트
- 오라클에 대해서 로컬 서버와 원격 서버를 동시 사용할 수 있도록 설정.

1. 기능 구현
- 이름, 전화번호를 입력 받아서 데이터베이스에 저장
- 번호, 이름, 전화번호를 콘솔에 출력

2. 화면 구성
이름 전화번호(x exit)?kim 010-123-1234
1명의 회원이 추가되었습니다.
이름 전화번호(x exit)?x

------------------
전체 회원수 : 1명
------------------
번호 이름 전화번호
1 kim 010-123-1234
------------------


3. 데이터베이스 준비 (local, remote 오라클 서버에 동시에 설정)
CREATE TABLE memberList (
 mid NUMBER  --PK
 ,name VARCHAR2(30)
 ,telephone VARCHAR2(30)
);

CREATE SEQUENCE memberListSeq;

ALTER TABLE 테이블이름
 ADD CONSTRAINT 제약이름 제약종류(제약대상);
ALTER TABLE 테이블이름
 DROP CONSTRAINT 제약이름;

ALTER TABLE memberList
 ADD CONSTRAINT memberList_mid_pk PRIMARY KEY(mid);

INSERT INTO memberList (mid, name, telephone) VALUES (memberListSeq.nextval, 'kim', '010-123-1234');
ROLLBACK;

SELECT mid, name, telephone FROM memberList;

SELECT COUNT(mid) AS count FROM memberList;

 

4. 프로그램 구성
//Member.java -> 자료형 클래스
//Conn.java -> 인터페이스
//LocalConn.java -> 클래스. Conn 인터페이스 구현.
//RemoteConn.java -> 클래스. Conn 인터페이스 구현.
//MemberDAO.java -> Conn 객체에 대해서 의존 관계 설정.
//Main.java -> main() 메소드
//applicationContext.xml -> 스프링 환경 설정 파일. (src 폴더 하위에 생성)


//문제) 이름, 전화번호를 입력 받아서 데이터베이스에 저장하는 액션 추가할 것.


5. 프로그램 구성
//Member.java -> 자료형 클래스
package com.test;

public class Member {
 
 private String mid, name, telephone ;

 public String getMid() {
  return mid;
 }

 public void setMid(String mid) {
  this.mid = mid;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public String getTelephone() {
  return telephone;
 }

 public void setTelephone(String telephone) {
  this.telephone = telephone;
 }

}

 

 

//Conn.java -> 인터페이스
package com.test;

import java.sql.Connection;
import java.sql.SQLException;

public interface Conn {
 
 public Connection getConnection()  throws SQLException, ClassNotFoundException;

}

 

 


//LocalConn.java -> 클래스. Conn 인터페이스 구현.
package com.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class LocalConn implements Conn {

 @Override
 public Connection getConnection() throws SQLException,
   ClassNotFoundException {
  Connection conn = null;
  
  Class.forName("oracle.jdbc.driver.OracleDriver");
  String url = "jdbc:oracle:thin:username/password@localhost:1521:xe";
  conn = DriverManager.getConnection(url);
  
  return conn;
 }

}

 

 


//RemoteConn.java -> 클래스. Conn 인터페이스 구현.
package com.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class RemoteConn implements Conn {

 @Override
 public Connection getConnection() throws SQLException,
   ClassNotFoundException {
  Connection conn = null;
  
  Class.forName("oracle.jdbc.driver.OracleDriver");
  String url = "jdbc:oracle:thin:username/password@211.63.89.85:1521:xe";
  conn = DriverManager.getConnection(url);
  
  return conn;
 }

}

 

 

//MemberDAO.java -> Conn 객체에 대해서 의존 관계 설정.
package com.test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class MemberDAO {
 
 private Conn conn;
 
 public void setConn(Conn conn) {
  this.conn = conn;
 }
 
 public ArrayList<Member> list() throws SQLException, ClassNotFoundException {
  ArrayList<Member> result = new ArrayList<Member>();
  
  Connection connection = conn.getConnection();
  
  String sql = "SELECT mid, name, telephone FROM memberList ORDER BY mid";
  PreparedStatement pstmt = connection.prepareStatement(sql);
  ResultSet rs = pstmt.executeQuery(sql);
  while(rs.next()) {
   Member member = new Member();
   member.setMid(rs.getString("mid"));
   member.setName(rs.getString("name"));
   member.setTelephone(rs.getString("telephone"));
   result.add(member);
  }
  rs.close();  
  pstmt.close();
  connection.close();
  
  return result;
 }
 
 public int count() throws SQLException, ClassNotFoundException {
  int result = 0;
  
  Connection connection  = conn.getConnection();
  
  
  String sql = "SELECT COUNT(*) AS count FROM memberList";
  PreparedStatement pstmt = connection.prepareStatement(sql);
  ResultSet rs = pstmt.executeQuery();
  
  while(rs.next()) {
   result = rs.getInt("count");
  }
   
  rs.close();
  pstmt.close();
  connection.close();
  
  return result;
 }
 
 public int add(Member member) throws SQLException, ClassNotFoundException {
  int result = 0;
  
  Connection connection  = conn.getConnection();
 
  String sql = "INSERT INTO memberList (mid, name, telephone) VALUES (memberListSeq.nextval, ?, ?)";
  PreparedStatement pstmt = connection.prepareStatement(sql);
  pstmt.setString(1, member.getName());
  pstmt.setString(2, member.getTelephone());
  result = pstmt.executeUpdate();
  pstmt.close();
  connection.close();  

  return result;
 } 
 

}

 

 


//Main.java -> main() 메소드
package com.test;

import java.util.Scanner;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

 public static void main(String[] args) {
  
  ApplicationContext context
   = new ClassPathXmlApplicationContext("applicationContext.xml");
  MemberDAO dao
   = context.getBean("memberDAO", MemberDAO.class);

  Scanner sc = new Scanner(System.in);
  
  do {
   
   System.out.print("이름 전화번호(x exit)?");
   String name = sc.next();
   if (name.equalsIgnoreCase("x")) {
    
    break;
   }
   String telephone = sc.next();
   
   Member member = new Member();
   member.setName(name);
   member.setTelephone(telephone);
   try {
    dao.add(member);
    System.out.println("회원이 추가 되었습니다.");
   }catch(Exception e){
    System.out.println(e.toString());
   }
  
  }while(true); 
  
  sc.close();
  
  try {
   System.out.println("-----------------------");
   System.out.printf("전체 인원수 : %d 명 %n"
     , dao.count());
   System.out.println("-----------------------");  
   for( Member member : dao.list()){
    System.out.printf("%s %s %s %n"
      , member.getMid()
      , member.getName()
      , member.getTelephone());
   }
  } catch (Exception e) {

  }
  
 }

}

 

 

//applicationContext.xml -> 스프링 환경 설정 파일. (src 폴더 하위에 생성)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
 
 <bean id="localConn" class="com.test.LocalConn"></bean>
 <bean id="remoteConn" class="com.test.RemoteConn"></bean>
 <bean id="memberDAO" class="com.test.MemberDAO">
  <property name="conn">
   <ref bean="localConn" />
  </property>
 </bean>
 
</beans>

 


----------------------------------------

 

'Spring' 카테고리의 다른 글

Spring 기본 설정방법!  (0) 2015.07.01
Spring 모듈 다운로드~  (0) 2015.07.01
04일차_Spring MVC, 데이터송수신, 회원관리.txt  (0) 2015.07.01
03일차_DI테스트  (0) 2015.06.30
01일차_DI 설명  (0) 2015.06.30
블로그 이미지

알 수 없는 사용자

,