프로그래밍

[Springboot] DB 연결 본문

자바/Spring Boot

[Springboot] DB 연결

시케 2023. 9. 18. 23:11
728x90
반응형

2023.09.18.월

DB연결

Spring boot 방식으로 데이터베이스와 연결하고 기본적인 형식을 구성해보자

 

라이브러리 설정

프로젝트 설정시 JDBC API와 사용할 데이터베이스의 Driver를 추가해준다

 

Oracle은 유료/무료 버전에 따라 클라우드 Driver 연결이 안될 수 있기 때문에

따로 Build Path / jar 등을 추가해주어야 한다(기존 Web방식과 동일)

 

의존성을 통해 올바르게 추가된것을 알 수 있다

 

DB 연결

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# oracle.jdbc.OracleDriver

spring.datasource.url=jdbc:mysql://localhost:3306/kimdb
# jdbc:oracle:thin:@localhost:1521/xe

spring.datasource.username=root
spring.datasource.password=1234

DB 연결은 application.properties 에서 설정할 수 있다

# 주석은 Oracle

 

코드 구현

MemberDTO

import lombok.Data;

@Data
public class MemberDTO {	
	private String mid;
	private String mpw;
	private String mSearch;

}

MemberDAO

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

@Repository
public class BoardDAO {
	
	// 의존관계(멤버변수)
	@Autowired
	private JdbcTemplate jdbcTemplate;
	
	// 응집도를 높여줌
	private final String SQL_SELECTALL ="SELECT * FROM BOARD"; 
	private final String SQL_SELECTONE ="SELECT * FROM BOARD WHERE BID = ? ";
	private final String SQL_INSERT ="INSERT INTO BOARD (MID, CONTENT) VALUES(?,?) ";
	private final String SQL_UPDATE ="UPDATE BOARD SET CONTENT = ? WHERE BID = ? ";
	private final String SQL_DELETE ="DELETE FROM BOARD WHERE BID = ? ";
	
	
	public List<BoardDTO> selectAll(BoardDTO bDTO) {
		// 반복적인 로직을 대신 수행하는 "템플릿 패턴"을 활용
		//jdbcTemplate.query(SQL_SELECTALL, new BeanPropertyRowMapper<MemberDTO>(MemberDTO.class));
		
		return jdbcTemplate.query(SQL_SELECTALL, new BeanPropertyRowMapper<BoardDTO>(BoardDTO.class));
	}
	
	public BoardDTO selectOne(BoardDTO bDTO) {
		try {
			Object[] args = { bDTO.getBid()};
			return jdbcTemplate.queryForObject(SQL_SELECTONE, args, new BeanPropertyRowMapper<BoardDTO>(BoardDTO.class));
		}
		catch (EmptyResultDataAccessException e) {
			return null;
		}
	}
	
	public boolean insert(BoardDTO bDTO) {
		int result = jdbcTemplate.update(SQL_INSERT, bDTO.getMid(), bDTO.getContent());

		if(result <= 0) {
			return false;
		}
		return true;
	}
	
	public boolean update(BoardDTO bDTO) {
		int result = jdbcTemplate.update(SQL_UPDATE, bDTO.getContent(), bDTO.getBid());

		if(result <= 0) {
			return false;
		}
		return true;
	}
	
	public boolean delete(BoardDTO bDTO) {
		int result = jdbcTemplate.update(SQL_DELETE, bDTO.getBid());

		if(result <= 0) {
			return false;
		}
		return true;
	}

}

 

new BeanPropertyRowMapper<MemberDTO>(MemberDTO.class)

 

기존에는 rowMapper 클래스를 직접 만들어 사용하였지만

현재는 SpringBoot에서 제공하는 클래스를 사용한다

 

소스코드 보러가기
728x90
반응형
Comments