정구리의 우주정복

[Spring] Datasource PostgreSql 접속하기 본문

JAVA/STUDY

[Spring] Datasource PostgreSql 접속하기

Jungry_ 2023. 7. 9. 20:30
반응형

application.yaml

spring:
  datasource:
    url: <db address>
    username: jungry
    password: jungry
    driver-class-name: org.postgresql.Driver

우선 yaml 파일에 datasource 에 db 접속정보들을 저장한다

 

 

PostgreSQLConnectionExample.java

package com.example.jungry.api;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

// 생성자 주입 방식
@RequiredArgsConstructor
@Component
public class PostgreSQLConnectionExample {
	// @RequiredArgsConstructor 사용해서 생성자 주입
    private final DataSource dataSource;

    public void connectToPostgreSQL() throws SQLException {
    	
        // Connection 객체를 초기화해줌
        Connection connection = null;
        // PreparedStatement 객체를 초기화해줌
        PreparedStatement preparedStatement = null;
        // ResultSet 객체를 초기화해줌
        ResultSet resultSet = null;

        try {
        	// dataSource 사용해서 getConnection 을 해줌 
            connection = dataSource.getConnection();
			
            // 넣어줄 쿼리
            String query = "SELECT * FROM animation where title like ?";
            preparedStatement = connection.prepareStatement(query);
            // sql 문에 매개변수 전달
            preparedStatement.setString(1, "가정교사%");
            // sql 실행 결과를 ResultSet 으로 받아오기
            resultSet = preparedStatement.executeQuery();

            while (resultSet.next()) {
            // title 컬럼의 값을 가져오기
                System.out.println(resultSet.getString("title"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (resultSet != null) {
                resultSet.close();
            }
            if (preparedStatement != null) {
                preparedStatement.close();
            }
            if (connection != null) {
                connection.close();
            }
        }
    }
}

 

Connection 객체 

  • DB 와 연결을 나타냄
  • Datasource 를 통해 DB 랑 연결하면 Connection 객체 얻을 수 있음
  • 작업 완료되면 리소스 닫아야함

PreparedStatement 객체

  • Connection 객체를 통해 PreparedStatement 생성 가능함 
  • 쿼리문에 매개변수 야무지게 전달 가능
  • 쿼리 실행결과는 ResultSet 객체로 받아올 수 있음
  • 작업 완료시 리소스 닫아야함

 

TestService.java

package com.example.jungry.api.service;

import com.example.jungry.api.PostgreSQLConnectionExample;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.sql.SQLException;

@RequiredArgsConstructor
@Service
public class TestService {

    private final PostgreSQLConnectionExample postgreSQLConnectionExample;

    public void getAnimation() throws SQLException {
        postgreSQLConnectionExample.connectToPostgreSQL();
        return null;
    }

}

가져와서 실행해줌

 

TestController.java

package com.example.jungry.api.controller;

import com.example.jungry.api.service.TestService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import java.sql.SQLException;

@RestController
@RequiredArgsConstructor
public class TestController {

    // 생성자 주입 방식 => 많이 씀 타입추론하기 편해서 ! 에러도 덜난다 !
    private final TestService testService;

    @GetMapping("/test/animation")
    public String getAnimation() throws SQLException {
        return testService.getAnimation();
    }
}

이후 

localhost:8080/test/animation 에 접속하면 console 에 sout 되는걸 확인 가능하다

반응형

'JAVA > STUDY' 카테고리의 다른 글

[Spring] 라이브러리  (1) 2024.02.03
[Spring] Autoconfiguration 만들어보기  (3) 2023.07.09
[IntelliJ] 단축키 (Mac)  (0) 2023.07.05
Mac mysql , Workbench download  (0) 2022.02.21
[JAVA] 객체지향 프로그래밍 (1)  (0) 2022.02.04
Comments