이번실습은 저번실습에 이어서 응용버젼을 공부해보려고 합니다!
 

06. Spring - ★JDBCTemplate 연동★

+ 실습에 들어가기전에 ( ※ 이번실습은 매우매우 중요해서 정말 열심히 공부해보겠습니다. ※) (★★★★★★★★★★★ 중요 ★★★★★★★★★★★) 들어가기에 앞서, 이번 실습은 준비물

mom11230.tistory.com

 
준비물이 필요한 실습인 만큼 저번 실습이 기억안나시는 분들은 공부하고 와주세요!
 

 
 
 
 
이번 실습의 목표는 다음과 같습니다.
1. Test 클래스를 실행하면 Enter Employee ID: 에 번호를 입력할 수 있는 값이 나온다
2. SQL Developer에 저장해놓은 Employee TABLE의 id 번호를 입력했을 때 일치하면  Passenger TABLE 을 호출한다.
3. Passenger TABLE에 저장해놓은 address, start_point, end_point, fare(요금) 데이터가 출력되게 한다.
 
 
 
 

(저번에는 TABLE 한개 연결하기도 어려웠는데....구....ㅅ...😎😎)

 
 
이번실습에서 필요한 코드입니다. 참조하세요!
 
가. 구현 방법 (전체구성)
사용
pakages : org.kitri.jdbctemplate.dao
                    org.kitri.jdbctemplate.dao.impl
                    org.kitri.jdbctemplate.dto
                    org.kitri.jdbctemplate.main
 
class : EmployeeDao.java
              EmployeeDaoImpl.java
              Employee.java
              Passenger.java
              Test.java
 
xml : config.xml
            pom.xml
 

 
 
 
원래 실습은 PassengerDao, PassengerDaoimpl 도 클래스로 만들어서 호출 하는거였지만 저는 한번 다르게 실습해보았습니다.
 
 
pakages : org.kitri.jdbctemplate.dao
Class : EmployeeDao.java
 

 

package org.kitri.jdbctemplate.dao;

import org.kitri.jdbctemplate.dto.Employee;
import org.kitri.jdbctemplate.dto.Passenger;

import java.util.List;

public interface EmployeeDao {
    List<Employee> getAllEmployees();

    List<Passenger> getPassengersByEmployeeId(int employeeId);
    
}

 
이 코드에서는 List 목록인 Employee, Passnger 의 interface 역할을 하는 코드를 구현했습니다.
 
 
 
pakages : org.kitri.jdbctemplate.dao.impl
Class : EmployeeDaoImpl.java
 
 

package org.kitri.jdbctemplate.dao.impl;

import org.kitri.jdbctemplate.dao.EmployeeDao;
import org.kitri.jdbctemplate.dto.Employee;
import org.kitri.jdbctemplate.dto.Passenger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;

import java.util.List;

@Component("emp")
public class EmployeeDaoImpl implements EmployeeDao {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public List<Employee> getAllEmployees() {
        String sql = "SELECT * FROM Employee";
        List<Employee> employees = jdbcTemplate.query(sql, (resultSet, i) -> {
            Employee employee = new Employee();
            employee.setId(resultSet.getInt("id"));
            employee.setFirstName(resultSet.getString("first_name"));
            employee.setLastName(resultSet.getString("last_name"));
            return employee;
        });
        return employees;
    }

    @Override
    public List<Passenger> getPassengersByEmployeeId(int employeeId) {
        String sql = "SELECT * FROM Passenger WHERE employee_id = ?";
        List<Passenger> passengers = jdbcTemplate.query(sql, new Object[]{employeeId}, (resultSet, i) -> {
            Passenger passenger = new Passenger();
            passenger.setId(resultSet.getInt("id"));
            passenger.setEmployeeId(resultSet.getInt("employee_id"));
            passenger.setAddress(resultSet.getString("address"));
            passenger.setStartPoint(resultSet.getString("start_point"));
            passenger.setEndPoint(resultSet.getString("end_point"));
            passenger.setFare(resultSet.getDouble("fare"));
            return passenger;
        });
        return passengers;
    }

}

 
이 클래스는 Spring 프레임워크에서 관리되는 빈으로서, 데이터베이스와의 상호 작용을 담당합니다. 필요에 따라 메서드를 추가하거나 수정하여 데이터베이스와의 상호 작용을 확장할 수 있습니다.
 
 
 
pakages : org.kitri.jdbctemplate.dto
Class :  Employee.java
 
 

 

package org.kitri.jdbctemplate.dto;

public class Employee {
	private int id;
	private String firstName;
	private String lastName;

	public Employee() {
	}

	public Employee(int id, String firstName, String lastName) {
		this.id = id;
		this.firstName = firstName;
		this.lastName = lastName;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getFirstName() {
		return firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	public String getLastName() {
		return lastName;
	}

	public void setLastName(String lastName) {
		this.lastName = lastName;
	}

}

 
이 클래스는 데이터베이스나 다른 계층 간에 직원 정보를 전달하는 데 사용됩니다. 주로 DAO(Data Access Object)나 서비스 계층에서 데이터베이스에서 읽어온 직원 정보를 객체로 변환하거나, 사용자가 입력한 직원 정보를 데이터베이스에 전달할 때 사용됩니다.
 
 
 
pakages : org.kitri.jdbctemplate.dto
Class :  Passenger.java
 
(코드가 길어서 일부만 캡쳐했습니다.)

 

package org.kitri.jdbctemplate.dto;

public class Passenger {
    private int id;
    private int employeeId;
    private String address;
    private String startPoint;
    private String endPoint;
    private double fare;

    public Passenger() {
    }

    public Passenger(int id, int employeeId, String address, String startPoint, String endPoint, double fare) {
        this.id = id;
        this.employeeId = employeeId;
        this.address = address;
        this.startPoint = startPoint;
        this.endPoint = endPoint;
        this.fare = fare;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getEmployeeId() {
        return employeeId;
    }

    public void setEmployeeId(int employeeId) {
        this.employeeId = employeeId;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getStartPoint() {
        return startPoint;
    }

    public void setStartPoint(String startPoint) {
        this.startPoint = startPoint;
    }

    public String getEndPoint() {
        return endPoint;
    }

    public void setEndPoint(String endPoint) {
        this.endPoint = endPoint;
    }

    public double getFare() {
        return fare;
    }

    public void setFare(double fare) {
        this.fare = fare;
    }
}

 
이 클래스도 Employee.java 클래스와 동일합니다.
 
 
pakages :  org.kitri.jdbctemplate.main
Class : Test.java
 

 

package org.kitri.jdbctemplate.main;

import org.kitri.jdbctemplate.dao.EmployeeDao;
import org.kitri.jdbctemplate.dto.Employee;
import org.kitri.jdbctemplate.dto.Passenger;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.List;
import java.util.Scanner;

public class Test {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        
        // 스프링 컨테이너 생성
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:config.xml");

        // EmployeeDao 빈 가져오기
        EmployeeDao employeeDao = ctx.getBean("emp", EmployeeDao.class);



        System.out.print("\n"+"Enter Employee ID: ");
        int employeeId = scanner.nextInt();

      
        List<Passenger> passengers = employeeDao.getPassengersByEmployeeId(employeeId);
        if (!passengers.isEmpty()) {
            System.out.println("Passenger 정보:"+"\n");
            for (Passenger passenger : passengers) {
                System.out.println("ID: " + passenger.getId());
                System.out.println("Address: " + passenger.getAddress());
                System.out.println("Start Point: " + passenger.getStartPoint());
                System.out.println("End Point: " + passenger.getEndPoint());
                System.out.println("Fare: " + passenger.getFare());
            }
        } else {
            System.out.println("해당하는 Passenger 정보가 없습니다.\n");
        }

        ctx.close();
    }
}

 
이코드를 실행하면 Enter Employee ID 를 입력하는 창이 Console에 나오게 되며, TABLE에 저장한 값과 일치할시 Passenger TABLE을 호출합니다.
 
 
 
xml : config.xml
 
여기서 주의해야할 점은 경로인데 저같은 경우에는
호스트주소 : 192.168.10.11
이름 : oracle
아이디/비번 : dst04/dst04
SID : DB19
를 사용하였습니다.
 
각자 만든 계정으로 주소를 바꾸지 않으면 정상적으로 실행되지않는다. 
 

 

 

<?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"
	xmlns:c="http://www.springframework.org/schema/c"
	xmlns:util="http://www.springframework.org/schema/util"
	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.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">

	<context:component-scan
		base-package="org.kitri.jdbctemplate" />

	<bean name="datasource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource"
		p:driverClassName="oracle.jdbc.OracleDriver"
		p:url="jdbc:oracle:thin:@192.168.10.11:1521:DB19"
		p:username="dst04" p:password="dst04" />

	<bean name="jdbctemplate"
		class="org.springframework.jdbc.core.JdbcTemplate"
		p:dataSource-ref="datasource" />


</beans>

 
 
 
나. SQL Developer TABLE 생성
 
모든 코드구성은 끝이 났다. 이제 SQL Developer 에서 TABLE 을 생성해보자 이번 실습에는 2개의 TABLE이 필요하다!
 

 
 
우선 기존에 생성한 TABLE이 있을 수 있으므로 Drop 을 이용해서 TABLE을 삭제한다.
 
 

 
그 후에 Employee, Passenger TABLE을 생성하는 코드를 만들었다. 이때 Employee의 id 가 Passenger id와 일치해야하므로 FOREIGN KEY(외래키) = employee_id 를 설정했고 ,기본키는 REFERENCES = Emplotee(id)를 사용했다.
 

 
그 다음에 TABLE 의 값을 집어 넣기 위한 VALUES 값을 만들었다 (예시이니까 마음대로 바꿔도 된다!)
 
 

 
 
마지막으로 SELECT 를 검색해서 TABLE 을 확인 할 수있게 만들었으며, 자동으로 commit 할 수 있게 만들었다.
 
 

Employee TABLE

 

Passenger TABLE

 
 
그러면 이렇게 2개의 TABLE의 값이 들어간것을 볼 수 있다.
 
 

 
 
 
전체코드

Drop TABLE Employee;
Drop TABLE Passenger;


CREATE TABLE Employee (
    id VARCHAR2(10) PRIMARY KEY,
    first_name VARCHAR2(10),
    last_name VARCHAR2(10)
);


CREATE TABLE Passenger (
    id NUMBER PRIMARY KEY,
    employee_id VARCHAR2(10),
    address VARCHAR2(100),
    start_point VARCHAR2(20),
    end_point VARCHAR2(20),
    fare NUMBER(20, 2),
    FOREIGN KEY (employee_id) REFERENCES Employee(id)
);


INSERT INTO Employee (id, first_name, last_name) VALUES ('2', '홍', '길동');
INSERT INTO Employee (id, first_name, last_name) VALUES ('3', '키', '트리');

INSERT INTO Passenger (id, employee_id, address, start_point, end_point, fare) 
VALUES (2, '2', '서울시 강남구', '강남구', '북가좌동', 50000.00);
INSERT INTO Passenger (id, employee_id, address, start_point, end_point, fare) 
VALUES (3, '3', '서울시 북가좌동', '북가좌동', '구로구', 2500.00);

SELECT * FROM Employee;
SELECT * FROM Passenger;


commit;

 
 
 
다. 실행방법
 
이제 Test 클래스를 실행하게 되면

정상적으로 코드구현시 Enter Emplotee ID: 라는 문구가 나오게 되었다. 이제 여기에 저장 해놓은 ID 인 값을 집어넣어본다. 
 
 

 
 
그러면 ID : 2 에 저장되어있던 정보가 이렇게 뙀!!!! 하고 나오게 된다. (야호야호~)
 
 
 
 새롭게 알아낸 사실~~~
 
이제 이번실습을 통해서 2개의 TABLE의 정보를 받을 수 있게 되었다. (이러다가 취업 빨리 할수도?????????키키)
 

'Spring' 카테고리의 다른 글

08. Spring - Mybatis  (5) 2024.05.02
06. Spring - ★JDBCTemplate 연동★  (2) 2024.04.23
05. Spring - Interface 주입  (2) 2024.04.22
04. Spring- Auto Wiring(@Autowiring, @Qualifier)  (3) 2024.04.19
03. Spring- Properties  (3) 2024.04.18
2024. 4. 24. 13:50
1 2 3 4 5 ··· 8