본문 바로가기
BACK-END/JAVA

Spring Boot : jdbcTemplate을 이용한 PostgreSQL DB연동법

by 개남 2022. 12. 9.

지난번 글에서 로컬에 PostgreSQL을 설치하고 DBeaver를 이용해 사용해봤으니 이번에는 PostgreSQL을 JAVA와 연결해보겠습니다.

 

2022.12.05 - [DATABASE] - PostgreSQL 15.1 설치 (Windows)

 

PostgreSQL 15.1 설치 (Windows)

PostgreSQL은 오픈소스 DBMS입니다. Oracle DB, MySQL, Microsoft SQL에 이어 많이 사용되는 DBMS로 알려져 있습니다. PostgreSQL is a powerful, open source object-relational database system with over 35 years of active development that ha

devnam.tistory.com

2022.12.06 - [DATABASE] - DBeaver 설치 및 PostgreSQL 연결하기(Windows)

 

DBeaver 설치 및 PostgreSQL 연결하기(Windows)

DBeaver는 SQL 클라이언트이자 데이터베이스 관리 도구입니다. 오픈소스이므로 자유롭게 사용이 가능합니다. https://dbeaver.io/download/ Download | DBeaver Community Download Tested and verified for MS Windows, Linux and M

devnam.tistory.com

저는 나중에는 Mybatis를 사용할거지만 이글에서는 jdbcTemplate을 이용해서 db와 연결해보겠습니다.

This is the central class in the JDBC core package. It simplifies the use of JDBC and helps to avoid common errors. It executes core JDBC workflow, leaving application code to provide SQL and extract results. This class executes SQL queries or updates, initiating iteration over ResultSets and catching JDBC exceptions and translating them to the generic, more informative exception hierarchy defined in the org.springframework.dao package.

JdbcTemplate은 JDBC를 매우 편리하게 사용할 수 있도록 도와줍니다. 아래에서 jdbcTemplate을 사용할때와 사용하지 않을때를 비교해보면 사용하기 더 편리한 것을 확인 할 수 있습니다. maven을 사용할경우pom.xml,application.yml(application.properties)에 다음을 추가하고 java에서 @Autowired jdbcTemplate,dataSource 를 추가 하셔서 사용하시면 됩니다.

설정 (pom.xml)

<dependency>
  <groupId>org.postgresql</groupId>
  <artifactId>postgresql</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

설정 (application.yml)

#Datasource Configuration
---
spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/postgres
    hikari:
      maximum-pool-size: 1
      username: postgres
      password: 1234
      platform: postgres

설정 (application.properties)

spring.datasource.url: jdbc:postgresql://localhost:5432/postgres
spring.datasource.username: postgres
spring.datasource.password: 1234

구현(jdbcTemplate 미사용)

package com.myproject.firstproject;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

@Component
public class RunOrgSql implements ApplicationRunner {

	    @Override
	    public void run(ApplicationArguments args) {

	    	try {
	    	//1. JDBC 드라이버 로딩(postgresql)
	    	Class.forName("org.postgresql.Driver");
	    	 
	    	//2. DB 서버 접속
	    	String url = "jdbc:postgresql://localhost:5432/postgres";
	    	Connection conn = DriverManager.getConnection(url,"postgres","1234");
	    	 
	    	//3. Statement or PreparedStatement 객체 생성하기
	    	Statement stmt = conn.createStatement();
	    	 
	    	//4. SQL 실행
	    	//'test' 테이블 생성
	    	//stmt.executeUpdate("create table test(id varchar2(5), name varchar(5))");

	    	//행 삽입
	    	stmt.executeUpdate("insert into test values('3','손흥민')"); 
	    	//select
	    	ResultSet rs = stmt.executeQuery("select * from test");
	    	 
	    	while(rs.next()){
	    		System.out.println("name:" + rs.getString("id")+":"+rs.getString(2)); 
	    	}
	    	 
	    	//5. 자원해제
	    	rs.close();
	    	stmt.close();
	    	conn.close(); // 연결해제
	    	
	    	}catch(Exception ex){
	    		ex.printStackTrace();
	    	}
	    }
	}

구현 (jdbcTemplate 사용)

package com.myproject.firstproject;

import java.sql.Connection;
import java.sql.Statement;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;

@Component
public class RunSql {
  @Autowired
    DataSource dataSource;

  @Autowired
    JdbcTemplate jdbcTemplate;
	   
    public void run(String[] args) throws Exception {
    //테이블 생성할경우
    // try (Connection connection = dataSource.getConnection()){
    //Statement statement = connection.createStatement();
    //String sql = "CREATE TABLE test(id VARCHAR(2), name VARCHAR(5), PRIMARY KEY (id))";
    //statement.executeUpdate(sql);
    //}
    jdbcTemplate.execute("INSERT INTO TEST VALUES (4, '황희찬')");
    String ab = jdbcTemplate.queryForObject("SELECT NAME FROM TEST WHERE id=?", String.class, "4");
    System.out.println("조회값:"+ab);
    }
}

저는 기존에 test라는 테이블을 이미 생성해 놓았습니다. jdbcTemplate사용법은 기본적으로 jdbcTemplate.execute(sql문) 을 하면 작성된 sql문을 실행해줍니다. jdbcTemplate.queryForObject는 단건의 데이터를 조회할때 사용합니다. 이렇게 실행했을때 정상적으로 데이터가 insert되고 조회되면 정상적으로 JAVA와 DB간 연동이 된 것 입니다. 

댓글