[SpringBoot] Spring JDBC 사용하여 데이터베이스 연결하기 [JDBC Template, Groovy 활용]

2023. 2. 10. 06:17·▣ Framework/Spring Boot🍀
728x90


 

[SpringBoot] Service 생성 및 의존성 주입 [생성자 주입을 권장하는 이유]

[SpringBoot] SLF4J 활용하여 프로젝트 로그 출력하기 [프로젝트 logback 설정하기] [SpringBoot] 제이슨(JSON)으로 데이터 형식 리턴하기 [Jackson 어노테이션 사용 방법] [SpringBoot] 스프링 부트(Spring Boot)에서

yermi.tistory.com


- Spring JDBC 사용하여 데이터베이스 연결하기

1. Spring JDBC 의존성 주입

// database
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
runtimeOnly 'com.mysql:mysql-connector-j'

 

JDBC 관련 의존성 주입


2. MySQL Test DB 연동

 

[MySQL] MySQL Test DB 다운로드 방법 [MySQL wolrd DB 다운로드]

- MySQL Test DB 다운로드 방법 MySQL 테스트 DB는 1) MySQL 설치 시 다운로드 하는 방법과 2) 사이트에서 다운로드 하는 방법이 있다. 1. MySQL 설치 시 다운로드 [MySQL] MySQL 다운로드 및 설치하기 [MySQL Workben

yermi.tistory.com


world의 city 데이터를 사용할 예정
application.properties에 MySQL jdbc 정보를 입력한다.

 

- Access denied for user 해결방법

 

[MySQL] Access denied for user 'user'@'localhost' [user 계정에 접근 권한이 없습니다]

- Access denied for user 'user'@'localhost' user 계정에 DB 접근 권한이 없어서 발생한 에러 - Access denied for user 'user'@'localhost' 해결방법 user 계정에 접근 권한을 부여해주면 된다. GRANT ALL PRIVILEGES ON world.* TO 'u

yermi.tistory.com


City 테이블의 model 생성
City 테이블의 Repository 생성


3. Groovy 적용

클래스 내에 Multiline String을 선언하기 위해, Groovy를 사용한다.
#build.gradle에 Grrovy plugins와 dependencies 추가
plugins {
    id 'java'
    id 'org.springframework.boot' version '2.7.6'
    id 'io.spring.dependency-management' version '1.0.15.RELEASE'
    id 'groovy' # plugins 추가
}

dependencies {
	implementation('org.codehaus.groovy:groovy') # groovy 추가
}

STS에서 Groovy plugin 설치
다 설치해주면 된다.
CitySql.groovy 파일 생성 후, 멀티스트링으로 SQL 문을 작성한다.


4. Mapper 생성 및 Groovy 적용

- CityRowMapper

package kr.co.yermi.firstboot.info.repository;

import java.sql.ResultSet;
import java.sql.SQLException;

import org.springframework.jdbc.core.RowMapper;

import kr.co.yermi.firstboot.info.model.City;

public class CityRowMapper implements RowMapper<City> {

	@Override
	public City mapRow(ResultSet rs, int rowNum) throws SQLException {
		City city = new City();
		city.setId(rs.getInt("ID"));
		city.setName(rs.getString("Name"));
		city.setCountryCode(rs.getString("countrycode"));
		city.setDistrict(rs.getString("district"));
		city.setPopulation(rs.getInt("population"));
		return city;
	}

}

- CityRepository

package kr.co.yermi.firstboot.info.repository;

import java.util.List;

import org.springframework.jdbc.core.namedparam.EmptySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;

import org.springframework.stereotype.Repository;

import kr.co.yermi.firstboot.info.model.City;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@Repository
public class CityRepository {
	
	private final NamedParameterJdbcTemplate namedParameterJdbcTemplate;
	private final CityRowMapper cityRowMapper;
	
	public CityRepository(NamedParameterJdbcTemplate namedParameterJdbcTemplate) {
		this.namedParameterJdbcTemplate = namedParameterJdbcTemplate;
		this.cityRowMapper = new CityRowMapper();
	}

	public List<City> findList(){
		log.debug("query : {}", CitySql.SELECT);
		
		return namedParameterJdbcTemplate.query(CitySql.SELECT, EmptySqlParameterSource.INSTANCE, this.cityRowMapper);
	}
}

- InfoService

package kr.co.yermi.firstboot.info;

import java.util.Date;
import java.util.List;

import org.springframework.stereotype.Service;

import kr.co.yermi.firstboot.info.model.City;
import kr.co.yermi.firstboot.info.model.Project;
import kr.co.yermi.firstboot.info.repository.CityRepository;

@Service
public class InfoService {
	
	private final CityRepository cityRepository;
	
	// spring 4.2 이상은 @Autowired 생략 가능
	public InfoService(CityRepository cityRepository) {
		this.cityRepository = cityRepository;
	}
	
	public Project getProjectInfo() {
		Project project = new Project();
		project.projectName = "firstboot";
		project.author = "yermi";
		project.createDate = new Date();
		
		return project;
	}
	
	public List<City> getCityList() {
		return this.cityRepository.findList();
	}
}

- InfoController

package kr.co.yermi.firstboot.info;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import kr.co.yermi.firstboot.info.model.City;
import kr.co.yermi.firstboot.info.model.Project;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@RestController
public class InfoController {
	
    private InfoService infoService;
	
    @Autowired
	public InfoController(InfoService infoService) {
		this.infoService = infoService;
	}
	
	@GetMapping("/cityList")
	public List<City> cityList() {
		log.debug("/cityList start");
		return infoService.getCityList();
	}
	
	@GetMapping("/info")
	public Project projectInfo() {
		log.debug("/info start");
		Project project = infoService.getProjectInfo();
		return project;
	}
}

cityList 실행 결과


- 참고자료

 

[SpringBoot] RestApi 만들기 (5.1) MySQL + JDBC Template

Spring JDBC 사용 namedParameterJdbcTemplate MySQL 연동하기 처음엔 Mybatis 를 사용하려고 했는데, jdbcTemplate 을 사용하려고 합니다. 이유는 여기 참고 하시고요~ 이전에 추가했던 mybatis dependency를 빼야겠네요

hello-bryan.tistory.com


728x90
'▣ Framework/Spring Boot🍀' 카테고리의 다른 글
  • [SpringBoot] GetMapping, PostMapping [예외처리로 에러 방지하기]
  • [SpringBoot] JDBC Template : SELECT [REST API 적용하여 데이터 조회하기]
  • [SpringBoot] Service 생성 및 의존성 주입 [생성자 주입을 권장하는 이유]
  • [SpringBoot] SLF4J 활용하여 프로젝트 로그 출력하기 [프로젝트 logback 설정하기]
예르미(yermi)
예르미(yermi)
끊임없이 제 자신을 계발하는 개발자입니다👨🏻‍💻
  • 예르미(yermi)
    예르미의 코딩노트
    예르미(yermi)
  • 전체
    오늘
    어제
    • 분류 전체보기 (937)
      • ◎ Java (133)
        • Java☕ (93)
        • JSP📋 (26)
        • Applet🧳 (6)
        • Interview👨🏻‍🏫 (8)
      • ◎ JavaScript (48)
        • JavaScript🦎 (25)
        • jQuery🌊 (8)
        • React🌐 (2)
        • Vue.js🔰 (6)
        • Node.js🫒 (3)
        • Google App Script🐑 (4)
      • ◎ HTML5+CSS3 (17)
        • HTML5📝 (8)
        • CSS3🎨 (9)
      • ──────────── (0)
      • ▣ Framework (67)
        • Spring🍃 (36)
        • Spring Boot🍀 (12)
        • Bootstrap💜 (3)
        • Selenium🌕 (6)
        • MyBatis🐣 (10)
      • ▣ Tools (47)
        • API🎯 (18)
        • Library🎲 (15)
        • JitPack🚀 (3)
        • Jenkins👨🏻 (7)
        • Thymeleaf🌿 (4)
      • ▣ Server (32)
        • Apache Tomcat🐱 (14)
        • Apache HTTP Server🛡️ (1)
        • Nginx🧶 (7)
        • OracleXE💿 (4)
        • VisualSVN📡 (4)
      • ▣ OS : 운영체제 (18)
        • cmd : 명령프롬프트💻 (10)
        • Linux🐧 (8)
      • ▣ SQL : Database (56)
        • Oracle SQL🏮 (26)
        • PL SQL💾 (9)
        • MySQL🐬 (6)
        • MariaDB🦦 (6)
        • H2 Database🔠 (3)
        • SQL 실전문제🐌 (6)
      • ────────── (0)
      • ◈ Human Project (86)
        • Mini : Library Service📚 (15)
        • 화면 설계 [HTML]🐯 (10)
        • 서버 프로그램 구현🦁 (15)
        • Team : 여수어때🛫 (19)
        • Custom : Student🏫 (9)
        • Custom : Board📖 (18)
      • ◈ Yermi Project (40)
        • 조사모아(Josa-moa)📬 (5)
        • Riddle-Game🧩 (6)
        • 맛있을 지도🍚 (2)
        • 어디 가! 박대리!🙋🏻‍♂️ (5)
        • 조크베어🐻‍❄️ (4)
        • Looks Like Thirty🦉 (2)
        • Toy Project💎 (12)
        • 오픈소스 파헤치기🪐 (4)
      • ◈ Refactoring (15)
        • Mini : Library Service📚 (8)
        • 서버 프로그램 구현🦁 (1)
        • Team : 여수어때🛫 (0)
        • 쿼리 튜닝일지🔧 (6)
      • ◈ Coding Test (89)
        • 백준(BOJ)👨🏻‍💻 (70)
        • 프로그래머스😎 (2)
        • 코드트리🌳 (7)
        • 알고리즘(Algorithm)🎡 (10)
      • ◈ Study (102)
        • 기초튼튼 개발지식🥔 (25)
        • HTTP 웹 지식💡 (4)
        • 클린코드(Clean Code)🩺 (1)
        • 디자인패턴(GoF)🥞 (12)
        • 다이어그램(Diagram)📈 (4)
        • 파이썬(Python)🐍 (16)
        • 에러노트(Error Note)🧱 (34)
        • 웹 보안(Web Security)🔐 (6)
      • ◈ 공부모임 (39)
        • 혼공학습단⏰ (18)
        • 코드트리 챌린지👊🏻 (2)
        • 개발도서 100독👟 (8)
        • 나는 리뷰어다🌾 (11)
      • ◈ 자격증 공부 (37)
        • 정보처리기사🔱 (16)
        • 정보처리산업기사🔅 (9)
        • 컴퓨터활용능력 1급📼 (12)
      • ─────────── (0)
      • ◐ 기타 (113)
        • 알아두면 좋은 팁(tip)✨ (46)
        • 개발자의 일상🎈 (44)
        • 개발도서 서평🔍 (10)
        • 개발관련 세미나🎤 (2)
        • 블로그 꾸미기🎀 (9)
        • 사도신경 프로젝트🎚️ (2)
  • 인기 글

  • 최근 댓글

  • 태그

    코딩 테스트
    spring
    Java
    코딩
    Error Note
    Project
    백준 티어
    html
    프로그래밍
    jsp
    Oracle
    CSS
    Database
    BOJ
    꿀팁
    백준
    javascript
    일상
    SQL
    자바스크립트
  • 250x250
  • hELLO· Designed By정상우.v4.10.3
예르미(yermi)
[SpringBoot] Spring JDBC 사용하여 데이터베이스 연결하기 [JDBC Template, Groovy 활용]
상단으로

티스토리툴바