H'academy
  • H'academy
  • Web
    • Back-end
      • Spring Framework
        • Spring 개발환경 구축
          • Project 생성
          • Maven 설정
          • Maven 저장소 위치 설정
          • Apache Tomcat 연동
          • Lombok 설정
        • Spring MVC Project
          • pom.xml
          • web.xml
          • root-context.xml
          • servlet-context.xml
          • DispatcherServlet
        • Controller
          • File Upload / Download
          • RestController(작성중)
        • Spring Test
          • Assert 단정문
          • Spring 환경 연동 테스트
          • MockMvc Test
        • Spring AOP
          • AOP 용어
          • Pointcut Expression
          • Filter
          • Interceptor
          • Filter vs Interceptor
          • Controller Advice(작성중)
        • Spring JDBC
          • DBCP
          • myBatis
            • ResultMap 활용
        • ETC
          • Logging
            • Tomcat Logging 설정
          • Property 관리
          • E-mail
            • Gmail 변경사항
          • Scheduler
          • Websocket
      • Spring Boot
        • STS 다운로드
        • 프로젝트 생성
        • 프로젝트 구조
        • Spring Devtools
        • Spring Controller
          • JSP 연동
            • * JSP 생성불가 문제
            • Spring Boot 3.x
          • Model
          • 요청 파라미터 처리
          • 경로 변수 처리
          • 요청 메소드
          • Redirect
          • Spring Actuator
        • Spring Boot JDBC
          • Database 정보
          • DAO Pattern
          • ORM Framework
            • myBatis
              • Mapper 생성
            • Spring Data JPA
        • Spring AOP
          • AspectJ
          • Filter
          • Interceptor
          • ControllerAdvice
        • REST API
        • Spring WebSocket
        • Send Mail
        • Logging
        • Spring Boot Test
        • Lombok
      • Java EE
        • 개발환경 구성
          • Server와 Client
          • Web Server와 WAS
        • Dynamic Web Project
      • Apache Tomcat
        • Apache Tomcat 구조
        • Tomcat User 생성
        • Tomcat Manager 설정
      • Maven
      • Jenkins
        • Installation
          • Github Webhook 설정
          • Maven 연동
        • Project setting
          • 소스 코드 관리 설정
          • 빌드 유발 설정
          • 빌드 작업 설정
      • OpenAPI(swagger)
        • swagger 2.x (legacy)
        • swagger 3.x (boot)
        • Swagger UI 꾸미기
        • SpringDoc
    • Front-end
      • HTML
        • Heading
        • <A>
        • <IMG>
        • <DIV>
        • <TABLE>
        • <FORM>
          • <INPUT>
          • <SELECT>
          • <TEXTAREA>
          • <FIELDSET>
        • List
      • CSS
        • CSS 적용 방식
          • 크기(size)
            • 픽셀(px)
          • 색상(color)
        • CSS 선택자
          • 스타일 우선순위
        • CSS 주요 속성
          • 크기 속성
            • border
            • margin
            • padding
            • box-sizing
          • 배경 속성
          • 글자 속성
            • font
            • text
          • 배치 속성
            • position
            • display
            • overflow
            • float
            • flexbox
        • CSS Reset
      • JS
        • syntax
          • let, const
          • 구조 분해 할당
          • spread operator
          • Object copy
          • this
          • module
        • jQuery
          • structure
          • function
          • ajax
            • ajax file upload
        • VueJS
          • CDN(Vue3)
            • 기본 구조
            • Vue Devtools
            • jQuery vs VueJS
            • Vue instance
              • data
                • IME issue
              • v-model
              • template
              • computed
              • watch
                • deep watch
                • vs Computed
              • methods
            • Vue directive
              • v-text
              • v-html
              • v-bind
                • v-bind style
                • v-bind class
              • v-on
                • once
                • prevent
              • v-show
              • v-if
              • v-for
          • Vue-cli 3
            • 프로젝트 구조
            • src
              • main.js
              • App.vue
              • HelloWorld.vue
            • Vue Router 4
              • History mode
              • 404 not found
              • Guard
                • beforeEach
            • Vuex
              • 이동 횟수 측정
            • axios
              • interceptor
          • Vue-electron
        • ReactJS
          • CDN(React18)
            • 템플릿 설명
            • JSX
            • render
            • Handling Events
              • onClick
              • onInput
            • Component
              • 클래스 컴포넌트
                • state
                • props
                • event
                  • Mouse
                  • Input
                • lifecycle
              • 함수형 컴포넌트
                • useState
                • useEffect
                • useReducer
                • useMemo
                • props
                • 조건부 렌더링
          • CRA
            • 자원 경로 설정
            • src 절대 경로 설정
            • react-router
            • Context API
            • Electron 설정
        • Webpack
          • NodeJS
          • Git
    • Ubuntu server
      • Jenkins
    • 테스트 도구
      • JMeter
        • Test Plan
        • Test Plan(with login)
        • Plugin 설치
    • WebRTC
  • Base Language
    • Java
      • Java 실행 과정
        • 개발 환경 구축
        • 샘플 코드 작성
        • 컴파일/실행
        • 환경 변수 설정
      • Java 초급
        • Hello world
        • 자료와 정보
        • 변수
          • 정수
            • 정수의 저장 원리
            • 정수형 변수 생성
          • 실수
            • 실수의 저장 원리
            • 실수형 변수 생성
          • 논리
            • 논리형 변수 생성
          • 문자
          • 문자열
            • 문자열 변수 생성
          • 사용자 정의 자료형
        • 연산자
          • 대입 연산
          • 부호 연산
          • 산술 연산
          • 복합 대입 연산
          • 증감 연산
          • 쉬프트 연산
          • 비트 연산
          • 비교 연산
          • 논리 연산
          • 삼항 연산
          • 변환 연산
        • 표준 입출력
          • 표준 출력
          • 표준 오류 출력
          • 표준 입력
            • Scanner 입력
        • 제어문
          • if 구문
            • 단일 조건
            • 두 가지의 조건
            • 여러 가지의 조건
          • switch~case 구문
          • while 구문
          • do~while 구문
          • for 구문
        • 랜덤(Random)
        • 배열
          • 1차원 배열
          • 2차원 배열
          • 다차원 배열
          • Sort
            • 선택 정렬
            • 버블 정렬
            • 삽입 정렬
      • Java 중급
        • 객체 지향 프로그래밍
        • 클래스
        • 인스턴스
        • 필드
        • 메소드
          • 설정(setter) 메소드
          • 반환(getter) 메소드
        • 생성자
        • 접근 제한
          • private
          • package
          • protected
          • public
        • 정적(static)
        • 불변(final)
        • 상수(constant)
        • 상속
          • this와 super의 이해
          • 멤버 변수 설정
          • 멤버 메소드 설정
          • 생성자 설정
        • 추상화
          • 추상 클래스
          • 인터페이스
        • 다형성
        • 중첩 클래스
          • 일반 중첩 클래스
          • static 중첩 클래스
          • 지역 중첩 클래스
          • 익명 중첩 클래스
      • Java API(작성중)
        • java.lang
        • java.util
        • java.text
        • java.time
        • java.io
        • java.net
        • java.sql
        • java.awt
        • javax.swing
      • Java 고급
        • 제네릭(Generic)
        • 열거형(Enum)
        • Annotation Type
          • Retention
          • Target
          • Nested Annotation
        • Java Reflection
          • Intro
          • Class
          • Field
          • Constructor
          • Method
          • Package
      • JDBC
        • 드라이버 로드
        • 연결 생성
          • JDBC Driver 유형
        • JdbcTemplate
      • Java 버전별 변경사항
        • Java 1.8
          • Lambda Expression
          • Stream API
          • java.time 패키지
        • Java 9
        • Java 12
          • switch~case
        • Java 13
          • Text Block
    • Arduino
      • 학습 준비
        • Reference
        • 아두이노 온라인 시뮬레이터
        • 전기의 이해
        • 그라운드(GND)의 이해
      • 개발 환경 구축
        • CH340 보드 설치
        • Editor 글꼴 설정
      • 아두이노 제어
        • 코드의 구성
        • 시리얼 출력
        • 디지털 출력
          • LED 출력
        • PWM 출력
        • 시리얼 입력
        • 디지털 입력
          • PIR 센서
        • 아날로그 입력
          • 온도 센서(LM35DZ)
          • 조도 센서
          • 가스 센서
        • 피에조 부저
        • 서보 모터 제어
          • 시리얼 서보 모터 제어
          • 스위치 서보 모터 제어
        • 온습도 센서(DHT-11)
        • LCD
      • 아두이노 통신
        • 블루투스(Bluetooth)
          • HC-06
            • 온도 센서 활용
          • HM-10
        • 와이파이(Wi-Fi)
          • ESP-01
            • WiFiEsp 라이브러리 추가
            • WiFiEsp 네트워크 스캔
        • 이더넷(Ethernet)
        • ArduinoJson 라이브리 사용
    • Regular Expression
  • Database
    • Oracle
      • 설치
        • SQL Plus
        • SQL Developer
        • DBeaver
        • Docker(Mac OS)
      • SQL
        • 관리자 명령
          • 사용자 관리
          • 권한 관리
          • Encoding 설정
          • 서비스 포트 설정
        • 사용자 명령
          • 테이블 관리
            • 테이블 항목 제약 조건
            • 외래키 제약조건
            • 데이터 유형
          • 시퀀스 관리
          • 데이터 관리
            • 데이터 추가
            • 데이터 조회
              • 오라클 내장 함수
              • 그룹 조회
              • Top N Query
            • 데이터 수정
            • 데이터 삭제
          • 뷰 관리
          • 인덱스 관리
          • 집합 연산
          • 테이블 조인
            • 등가 조인
            • 외부 조인
        • HR 계정
        • 기타 명령
          • 컬럼 간격 조정
      • 내보내기 및 불러오기
        • EXPDP, IMPDP
        • Docker로 실행중인 경우
      • 기타
        • 자동 세션 제거
        • Tablespace 관리
        • Unlock user
  • 면접대비
    • Q&A
      • Java
      • Database
      • Web
      • IT 일반상식
  • ETC
    • Eclipse IDE
      • 설치
      • 화면 설명
      • 환경 설정
      • 프로젝트 생성
      • 소스파일 작성 및 실행
    • Github
      • Github 계정 관리
      • Github 저장소 관리
        • Profile
        • Collaborators
        • Code
        • Issues
        • Pull requests
        • Action
          • Vue 3 Deploy Action
      • Personal Access Token
      • Git ignore 설정
        • Spring 개발용 샘플
      • Github Eclipse 연동
        • Branches
        • Project
        • Team project
          • Dynamic web project
          • Spring Boot Project
          • Branch 생성
          • Pull Request
          • Branch 보호
          • Branch 다시 생성
    • Figma
      • Team
      • Design
      • Component
    • 과정평가형
      • 실기 모의고사 1회
      • 실기 모의고사 2회
      • 실기 모의고사 3회
      • 실기 모의고사 4회
    • VScode
      • Live Server 실행 오류
      • Github 계정 변경
    • Naver ToastUI Editor
      • Editor 만들기
        • Editor options
          • File upload
      • Viewer 만들기
    • 문자 인코딩 방식
    • OBS
      • 녹화 잡음 제거 설정
    • Semantic Version
Powered by GitBook
On this page
  • Spring JDBC란
  • 필요 라이브러리
  • 도구 준비
  • DriverManagerDataSource
  • JdbcTemplate
  • 테이블 준비
  • 등록(INSERT)
  • 완성 코드
  • 수정(UPDATE)
  • 완성 코드
  • 삭제(DELETE)
  • 완성 코드
  • 조회(SELECT)
  • 데이터베이스 테이블
  • 자바(객체 지향) 관점
  • 완성 코드
  1. Base Language
  2. Java
  3. JDBC

JdbcTemplate

이 문서에서는 Spring에서 제공하는 JDBC 기능을 사용하는 방법에 대해서 다룬다.

Spring JDBC란

Spring에서 제공하는 JDBC(Java DataBase Connectivity)를 위한 도구들이다.

  • DriverManagerDataSource - 데이터베이스 연결 담당 객체

  • JdbcTemplate - 구문 실행 객체

필요 라이브러리

프로그램을 구현하기에 앞서 다음과 같은 라이브러리를 준비해야 한다.

  • 오라클

    • ojdbc8

  • Spring

    • spring-beans

    • spring-core

    • spring-tx

    • spring-jdbc

  • 기타

    • commons-logging-1.2

도구 준비

JDBC를 위한 도구를 준비하는 코드는 다음과 같다.

DriverManagerDataSource

DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("oracle.jdbc.OracleDriver");
dataSource.setUrl("jdbc:oracle:thin:@localhost:1521:xe");
dataSource.setUsername("계정이름");
dataSource.setPassword("비밀번호");

JdbcTemplate

JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

테이블 준비

테이블은 Database에 생성되어 있어야 한다.

이 문서에서는 다음 테이블(table)을 생성하여 사용한다.

CREATE TABLE STUDENT(
NO NUMBER PRIMARY KEY,
NAME VARCHAR2(21) NOT NULL CHECK(REGEXP_LIKE(NAME, '^[가-힣]{2,7}$')),
KOREAN NUMBER DEFAULT 0 NOT NULL CHECK(KOREAN BETWEEN 0 AND 100),
ENGLISH NUMBER DEFAULT 0 NOT NULL CHECK(ENGLISH between 0 AND 100),
MATH NUMBER DEFAULT 0 NOT NULL CHECK(MATH between 0 AND 100)
);

번호 등록을 위한 시퀀스(sequence)도 생성한다.

CREATE SEQUENCE STUDENT_SEQ;

등록(INSERT)

등록을 하기 위한 SQL 구문은 다음과 같다.

INSERT INTO STUDENT(NO, NAME, KOREAN, ENGLISH, MATH)
VALUES(STUDENT_SEQ.NEXTVAL, '테스트', 50, 60, 70);

구문에서 변할 수 있는 정보는 이름, 국어점수, 영어점수, 수학점수이다. 따라서 해당하는 정보들을 자바에서 입력 받고 구문을 완성하여 DBMS에 전송해야 한다.

DriverManagerDataSource와 JdbcTemplate을 먼저 준비한다.

이후 추가할 데이터를 다음과 같이 준비한다.

String name = "피카츄";
int korean = 50, english = 60, math = 70;

데이터는 Scanner 클래스 등을 이용하여 사용자에게 입력 받는 것도 가능하다.

Scanner sc = new Scanner(System.in);
System.out.print("이름 : ");     String naem = sc.next();
System.out.print("국어 : ");     int korean = sc.nextInt();
System.out.print("영어 : ");     int english = sc.nextInt();
System.out.print("수학 : ");     int math = sc.nextInt();
sc.close(); 

준비된 데이터를 추가할 수 있는 SQL 구문과 배열을 준비한다.

String sql = "INSERT INTO STUDENT(NO, NAME, KOREAN, ENGLISH, MATH) VALUES(STUDENT_SEQ.NEXTVAL, ?, ?, ?, ?)";
Object[] param = {name, korean, english, math};

JdbcTemplate을 실행하며 작성한 SQL 구문과 데이터를 전달한다.

jdbcTemplate.update(sql, param); 

완성 코드

//사용자 입력
Scanner sc = new Scanner(System.in);
System.out.print("이름 : ");     String naem = sc.next();
System.out.print("국어 : ");     int korean = sc.nextInt();
System.out.print("영어 : ");     int english = sc.nextInt();
System.out.print("수학 : ");     int math = sc.nextInt();
sc.close(); 

//연결 도구 생성 
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("oracle.jdbc.OracleDriver");
dataSource.setUrl("jdbc:oracle:thin:@localhost:1521:xe");
dataSource.setUsername("계정이름");
dataSource.setPassword("비밀번호");

//구문 실행 도구 생성
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

//구문 및 데이터 배열 준비
String sql = "INSERT INTO STUDENT(NO, NAME, KOREAN, ENGLISH, MATH) VALUES(STUDENT_SEQ.NEXTVAL, ?, ?, ?, ?)";
Object[] param = {name, korean, english, math};

//실행
jdbcTemplate.update(sql, param); 

System.out.println("완료");

수정(UPDATE)

STUDENT 테이블에서 할 수 있는 수정은 다음과 같은 것들이 있다.

  • 특정 번호 학생에 대한 모든 정보를 변경한다

  • 특정 번호 학생에 대한 이름을 변경한다

  • 특정 번호 학생에 대한 점수 정보를 변경한다

번호가 PRIMARY KEY이기 때문에 특정 대상을 수정할 때는 반드시 번호가 필요하다. 여러 학생을 동시에 고치는 행위는 일반적이지 않으므로 번호를 수정하는 경우가 없도록 해야 한다.

특정 번호 학생에 대한 모든 정보를 변경하는 SQL 구문은 다음과 같다.

UPDATE STUDENT SET NAME='라이츄',KOREAN=60,ENGLISH=70,MATH=80 WHERE NO=1;

구문에서 변할 수 있는 정보는 이름, 국어점수, 영어점수, 수학점수, 번호이다. 해당 정보들은 자바에서 입력받고 구문에 합성하여 DBMS에서 처리할 수 있도록 프로그램을 구성해야 한다.

DriverManagerDataSource와 JdbcTemplate을 먼저 준비하고 수정을 위한 데이터를 준비한다.

int no = 1;
String name = "라이츄";
int korean = 60, english = 70, math = 80;

Scanner를 이용하여 입력 받을 경우의 코드는 다음과 같다.

Scanner sc = new Scanner(System.in);

System.out.print("수정할 번호 : ");
int no = sc.nextInt();

System.out.print("수정할 이름 : ");
String name = sc.next();

System.out.print("수정할 국어점수 : ");
int korean = sc.nextInt();

System.out.print("수정할 영어점수 : ");
int english = sc.nextInt();

System.out.print("수정할 수학점수 : ");
int math = sc.nextInt();

sc.close();

준비한 데이터를 설정할 수 있도록 구문과 배열을 준비한다. 주의할 점은 구문에 작성된 홀더(?)와 동일한 순서로 배열의 데이터가 존재해야 한다는 것이다.

String sql = "UPDATE STUDENT SET NAME=?,KOREAN=?,ENGLISH=?,MATH=? WHERE NO=?";
Object[] param = {name, korean, english, math, no};

구문과 데이터를 JdbcTemplate에게 전달하여 실행을 지시한다. 단, 조건에 따라 수정된 데이터가 없을 수도 있으므로 결과를 받아서 확인해야한다.

int result = jdbcTemplate.update(sql, param);

결과에 따라 성공/실패 여부를 사용자에게 출력한다.

if(result > 0){
    System.out.println("정보 변경이 완료되었습니다");
}
else {
    System.out.println("해당하는 번호가 존재하지 않습니다");
}

완성 코드

//데이터 준비
Scanner sc = new Scanner(System.in);

System.out.print("수정할 번호 : ");
int no = sc.nextInt();

System.out.print("수정할 이름 : ");
String name = sc.next();

System.out.print("수정할 국어점수 : ");
int korean = sc.nextInt();

System.out.print("수정할 영어점수 : ");
int english = sc.nextInt();

System.out.print("수정할 수학점수 : ");
int math = sc.nextInt();

sc.close();

//연결 도구 생성 
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("oracle.jdbc.OracleDriver");
dataSource.setUrl("jdbc:oracle:thin:@localhost:1521:xe");
dataSource.setUsername("계정이름");
dataSource.setPassword("비밀번호");

//구문 실행 도구 생성
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

//구문 및 데이터 배열 준비
String sql = "UPDATE STUDENT SET NAME=?,KOREAN=?,ENGLISH=?,MATH=? WHERE NO=?";
Object[] param = {name, korean, english, math, no};

//실행
int result = jdbcTemplate.update(sql, param); 

//결과에 따른 출력
if(result > 0){
    System.out.println("정보 변경이 완료되었습니다");
}
else {
    System.out.println("해당하는 번호가 존재하지 않습니다");
}

삭제(DELETE)

삭제는 PRIMARY KEY를 이용하여 한 개의 데이터를 삭제하는 것이 일반적이다.

DELETE STUDENT WHERE NO = 1;

DriverManagerDataSource와 JdbcTemplate을 먼저 준비하고 삭제를 위한 데이터를 준비한다.

int no = 1;

다음과 같이 Scanner로 입력 처리할 수 있다.

Scanner sc = new Scanner(System.in);
System.out.print("삭제할 번호 : ");
int no = sc.nextInt();
sc.close();

데이터를 설정할 구문과 배열을 준비한다.

String sql = "DELETE STUDENT WHERE NO = ?";
Object[] param = {no};

JdbcTemplate에게 구문과 배열을 전달하며 실행을 명령한다. 실행 후 실제로 삭제된 개수를 알아야 사용자에게 성공과 실패를 알려줄 수 있으므로 반환값을 int 형태의 변수에 저장한다.

int result = jdbcTemplate.update(sql, param);

결과에 따라 사용자에게 성공/실패 여부를 출력한다.

if(result > 0){
    System.out.println("삭제 완료");
}
else {
    System.out.println("올바르지 않은 번호");
}

완성 코드

//데이터 준비
Scanner sc = new Scanner(System.in);

System.out.print("삭제할 번호 : ");
int no = sc.nextInt();

sc.close();

//연결 도구 생성 
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("oracle.jdbc.OracleDriver");
dataSource.setUrl("jdbc:oracle:thin:@localhost:1521:xe");
dataSource.setUsername("계정이름");
dataSource.setPassword("비밀번호");

//구문 실행 도구 생성
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

//구문 및 데이터 배열 준비
String sql = "DELETE STUDENT WHERE NO = ?";
Object[] param = {no};

//실행
int result = jdbcTemplate.update(sql, param); 

//결과에 따른 출력
if(result > 0){
    System.out.println("삭제 완료");
}
else {
    System.out.println("올바르지 않은 번호");
}

조회(SELECT)

조회는 등록, 수정, 삭제와 구문의 목적과 명령이 다르다. 조회의 목적은 데이터베이스 테이블의 데이터를 프로그램으로 가져오는 것이다. 하지만 데이터베이스 테이블은 표 형태를 가지고 있고, 자바에서는 객체 형태로 표현해야 하기 때문에 변환이 필요하다. 예를 들어서 다음과 같은 테이블이 있을 경우 자바에서는 다섯 개의 객체가 있다고 본다.

데이터베이스 테이블

NO
NAME
KOREAN
ENGLISH
MATH

1

피카츄

73

79

78

2

라이츄

57

69

80

3

파이리

93

82

80

4

꼬부기

99

51

74

5

버터플

85

98

67

자바(객체 지향) 관점

  • 1번 학생(no=1,name=피카츄,korean=73,english=79,math=78)

  • 2번 학생(no=2,name=라이츄,korean=57,english=69,math=80)

  • 3번 학생(no=3,name=파이리,korean=93,english=82,math=80)

  • 4번 학생(no=4,name=꼬부기,korean=99,english=51,math=74)

  • 5번 학생(no=5,name=버터플,korean=85,english=98,math=67)

따라서 데이터베이스를 객체로 변환하고 List에 저장하여 순서를 유지하도록 관리하는 것이 자바에서 의미 있는 데이터로 사용하는 방법이라고 볼 수 있다.

이를 위해서 데이터베이스의 한 줄을 저장하기 위한 클래스를 설계한다. 이를 DTO(Data Transfer Object)라 부른다.

StudentDto.java
public class StudentDto {
    private int no;
    private String name;
    private int korean;
    private int english;
    private int math;
    
    //setter, getter, toString() 등을 추가로 생성
}

그리고 조회 결과를 StudentDto에 어떻게 복사할 것인지 알려주기 위한 클래스가 필요하며 이를 RowMapper<T> 라고 부른다.

RowMapper<StudentDto> mapper = new RowMapper<StudentDto>(){
    @Override
    public StudentDto mapRow(ResultSet rs, int idx) throws SQLException {
        StudentDto studentDto = new StudentDto();
        studentDto.setNo(rs.getInt("no"));
        studentDto.setName(rs.getString("name"));
        studentDto.setKorean(rs.getInt("korean"));
        studentDto.setEnglish(rs.getInt("english"));
        studentDto.setMath(rs.getInt("math"));
        return studentDto;
    }
};

RowMapper<T>는 함수형 인터페이스이기 때문에 Lambda 표현이 가능하다.

RowMapper<StudentDto> mapper = (rs, idx) -> {
    StudentDto studentDto = new StudentDto();
    studentDto.setNo(rs.getInt("no"));
    studentDto.setName(rs.getString("name"));
    studentDto.setKorean(rs.getInt("korean"));
    studentDto.setEnglish(rs.getInt("english"));
    studentDto.setMath(rs.getInt("math"));
    return studentDto;
};

위 두 가지가 준비되었다면 동일하게 DriverManagerDataSource와 JdbcTemplate을 준비하여 query 메소드를 실행하도록 코드를 구성한다. 반환형은 List<StudentDto> 형태이다.

String sql = "SELECT * FROM STUDENT";
List<StudentDto> list = jdbcTemplate.query(sql, mapper);

반복문을 통해 출력을 수행한다.

for(StudentDto studentDto : list){
    System.out.println(studentDto.getName());
}

완성 코드

//변환 객체 준비
RowMapper<StudentDto> mapper = (rs, idx) -> {
    StudentDto studentDto = new StudentDto();
    studentDto.setNo(rs.getInt("no"));
    studentDto.setName(rs.getString("name"));
    studentDto.setKorean(rs.getInt("korean"));
    studentDto.setEnglish(rs.getInt("english"));
    studentDto.setMath(rs.getInt("math"));
    return studentDto;
};

//연결 도구 생성 
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("oracle.jdbc.OracleDriver");
dataSource.setUrl("jdbc:oracle:thin:@localhost:1521:xe");
dataSource.setUsername("계정이름");
dataSource.setPassword("비밀번호");

//구문 실행 도구 생성
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

//구문 준비
String sql = "SELECT * FROM STUDENT";

//실행 및 목록 가져오기
List<StudentDto> list = jdbcTemplate.query(sql, mapper);

//출력
for(StudentDto studentDto : list){
    System.out.print("번호 : " + studentDto.getNo());
    System.out.print("/");
    System.out.print("이름 : " + studentDto.getName());
    System.out.print("/");
    System.out.print("국어 : " + studentDto.getKorean());
    System.out.print("/");
    System.out.print("영어 : " + studentDto.getEnglish());
    System.out.print("/");
    System.out.print("수학 : " + studentDto.getMath());
    System.out.println();
}
PreviousJDBC Driver 유형NextJava 버전별 변경사항

Last updated 2 years ago

해당 라이브러리들은 에서 검색하여 다운로드 가능하다.

Maven Central Repository
Maven Repository: Search/Browse/Explore
Logo
select process flow