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

(★★★★★ 중요 ★★★★★)
들어가기에 앞서, 이번 실습은 준비물이 필요합니다.
🌍01. Oracle Database Client로 DB 설치하기
링크: Oracle Instant Client Downloads | Oracle 대한민국
Oracle Instant Client Downloads | Oracle 대한민국
www.oracle.com
🌍02. 자신의 Oracle 계정을 만들어서 등록하기

🌍03. Oracle SQL Developer 다운받기
링크 : SQL Developer | Oracle 대한민국
SQL Developer
Oracle SQL Developer는 무료 개발 환경으로 전통적인 배포 및 클라우드 배포 모두에서 Oracle Database의 관리를 간소화해 줍니다. 또한 PL/SQL 애플리케이션, 쿼리 도구, DBA 콘솔, 보고서 인터페이스 등의
www.oracle.com

각자 환경에 맞게 설치하면 준비 끝입니다. 그러면, 실습시작 해볼게요~~(화이팅👏👏👏👏)

✅ 00. JDBCTemplate 란?
JdbcTemplate은 스프링 프레임워크에서 제공하는 JDBC(Java Database Connectivity)를 사용하는 데 도움을 주는 유틸리티 클래스입니다. JDBC는 자바 애플리케이션에서 관계형 데이터베이스와 통신하기 위한 표준 API를 제공합니다.
JdbcTemplate은 JDBC의 복잡한 부분을 추상화하고 간단한 방식으로 데이터베이스와 상호작용할 수 있도록 해줍니다. 이를 통해 개발자는 SQL 쿼리를 실행하고 결과를 처리하는 데 필요한 반복적인 작업을 줄일 수 있습니다.
JdbcTemplate의 주요 기능은 다음과 같습니다:
1. SQL 실행: JdbcTemplate은 SQL 쿼리를 실행하기 위한 여러 메서드를 제공합니다. 이를 통해 SELECT, INSERT, UPDATE, DELETE 등의 다양한 작업을 수행할 수 있습니다.
2. 파라미터 바인딩: JdbcTemplate은 SQL 쿼리에 파라미터를 바인딩하는 기능을 제공합니다. 이를 통해 SQL 인젝션과 같은 보안 문제를 방지할 수 있습니다.
3. 결과 추출: JdbcTemplate은 SQL 쿼리의 결과를 추출하고 처리하는 데 사용할 수 있는 다양한 메서드를 제공합니다. 이를 통해 결과를 객체로 변환하거나 원시 데이터 형식으로 처리할 수 있습니다.
4. 예외 처리: JdbcTemplate은 데이터베이스 작업 중 발생할 수 있는 예외를 처리하는 방법을 제공합니다. 이를 통해 데이터베이스와의 통신 중 예기치 않은 상황에 대비할 수 있습니다.
JdbcTemplate은 스프링의 핵심 모듈인 스프링 JDBC에 포함되어 있으며, 스프링 애플리케이션에서 데이터베이스와의 효율적인 상호작용을 지원하는 데 널리 사용됩니다.
(출처-ChatGPT)
✅ 01. 소개
가. 스프링 JDBC(Java DataBase Connectivity)

이번실습에서 DB를 연동하기 위해 사용할 문장입니다.
나. JDBC 템플릿

다. 템플릿 패턴
- 추상클래스가 정의된 방식/템플릿을 노출해서 메소드를 호출
- 하위(서브)클래스가 필요할 때마다 메소드 구현체를 override 할 수 있지만, 호출은 추상 클래스에 의해 정의된 것과 동일한 방식
- 행동패턴에 속함
- 예시 이미지

- 1 단계: 추상클래스 만들기
- 2단계: 구현 클래스 만들기
- 3단계: 데모클래스 실행 및 결과보기
라. JDBC 템플릿

마. 제공 메소드

✅ 02. 메이븐 프로젝트 만들기
가. 스프링 컨텍스트(spring-context) 설정

나. pom 파일 부분 수정
이번코드에서는 pom.xml 도 부분 수정을 해야합니다.

pom.xml

spring-(jdbc,tx)-4.3.6.jar 이 pom.xml 에 적용되도록 해줍니다.
다. 데이터베이스 드라이버 설정

이 부분은 mysql DB 사용하시는 분들만 확인하시면됩니다!
라. 구현 방법 (전체구성)
사용
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
Test.java
xml : config.xml
pom.xml

pakages : org.kitri.jdbctemplate.dao
Class : EmployeeDao.java

package org.kitri.jdbctemplate.dao;
import org.kitri.jdbctemplate.dto.Employee;
public interface EmployeeDao {
int create(Employee employee);
int update(Employee employee);
int remove(int id);
}
이 코드는 데이터베이스에서 직원(Employee) 정보를 조작하는 DAO(Data Access Object)를 정의하는 인터페이스입니다. 각 메서드는 데이터베이스에서 직원 정보를 생성(create), 업데이트(update), 삭제(remove)하는 데 사용됩니다.
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.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
//@Component
@Component("emp")
public class EmployeeDaoImpl implements EmployeeDao {
@Autowired
private JdbcTemplate jdbctemplate;
@Override
public int create(Employee employee) {
String insertSql = "insert into employee values(?, ?, ?)";
int count =
jdbctemplate.update(insertSql,
Integer.valueOf(employee.getId()),
employee.getFirstName(),
employee.getLastName());
return count;
}
@Override
public int update(Employee employee) {
return 0;
}
@Override
public int remove(int id) {
return 0;
}
public JdbcTemplate getJdbctemplate() {
return jdbctemplate;
}
public void setJdbctemplate(JdbcTemplate jdbctemplate) {
this.jdbctemplate = jdbctemplate;
}
}
이 클래스는 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.main
Class : Test.java

package org.kitri.jdbctemplate.main;
import java.sql.SQLException;
import java.util.Scanner;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
public class Test {
private static ClassPathXmlApplicationContext ctx;
public static void main(String[] args) throws SQLException {
// 스프링 컨테이너 생성
ctx = new ClassPathXmlApplicationContext("classpath:org/kitri/jdbctemplate/main/config.xml");
// 빈 객체 사용
JdbcTemplate jdbcTemplate = (JdbcTemplate) ctx.getBean("jdbctemplate");
String insertSql = "insert into employee values(?, ?, ?)";
int rowCount = jdbcTemplate.update(insertSql, Integer.valueOf(1), "길동", "홍");
// jdbcTemplate.getDataSource().getConnection().commit();
System.out.println("영향받은 행수: " + rowCount);
System.out.println("계속 하려면 엔터>>>");
Scanner scan = new Scanner(System.in);
scan.nextLine();
String updateSql = "update employee set firstname = ?, lastname = ? " + "where id = ?";
rowCount = jdbcTemplate.update(updateSql, "길동5", "홍", Integer.valueOf(1));
System.out.println("영향받은 행수: " + rowCount);
// 스프링 컨테이너 소멸
scan.close();
ctx.close();
}
}
이코드를 실행하면 employee 라는 테이블에 insert into employee table문으로 인해 TABLE 값에 홍길동이 저장되고, ENTER 키를 누르게되면 홍길동5로 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 을 생성해보자

우선 성과 이름을 구분할 수 있게 employee table 을 생성해주었다.

바뀐 값을 적용해주기 위해서는 commit 을 하거나, 재실행 해주면 된다. (저는 commit으로했어요~~)
이제 Test.java 클래스를 실행시켜주면

정상적으로 경로가 설정되었으면, 영향받은 행수: 1 이라는 문구가 뜬다.

SELECT 문으로 TABLE 확인 결과 정삭적으로 DB 연결이 되었다.!!!(감격)

다시 Test로 돌아가서 ENTER를 눌러보면

영향받은 행수가 생겼다. 다시 SQL 로 넘어가서 검색을 해보면,

홍길동5로 TABLE이 UPDATE 가 된것을 볼 수 있다. (야호!)
+ 새롭게 알아낸 사실~~~

이 실습을 통해 Eclipse -> SpringBoot ->SQL DB 연동을 할 수 있게 되었으며, 앞으로의 실습에서 가장 중요한 과정을 배우게 되었다. (하면 할수록 코딩이 재밌어진다헤헤)

'Spring' 카테고리의 다른 글
08. Spring - Mybatis (5) | 2024.05.02 |
---|---|
07. Spring - ★JDBCTemplate 연동(응용)★ (0) | 2024.04.24 |
05. Spring - Interface 주입 (2) | 2024.04.22 |
04. Spring- Auto Wiring(@Autowiring, @Qualifier) (3) | 2024.04.19 |
03. Spring- Properties (3) | 2024.04.18 |