본문 바로가기
코딩/Spring

[Spring / DB] Spring에서의 SQL DB연결

by Leedius 2023. 3. 14.

우선 application.properties 파일에 해당 항목들을 추가한다.

#port 설정
server.port=8081

#thymeleaf 새로고침 적용
spring.thymeleaf.cache=false

#데이터베이스 접속 정보
#spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521/xe
#spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.datasource.url=jdbc:log4jdbc:oracle:thin:@localhost:1521/xe
spring.datasource.username=MyDB
spring.datasource.password=ORACLE

#xml location
mybatis.mapper-locations=classpath:mappers/*.xml

#데이터베이스 접속 정보에 3~4줄은 로그를 볼수있는 코드이고 5~6번째 줄은 접속하는 계정정보이다.

#xml location에는 추가한 mapper파일들을 사용할 수 있게 해주는 코드이다.

 

우선 컨트롤러 페이지를 먼저 만들고 다음과 같이 코드를 작성해 준다.

package com.study.test.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

import com.study.test.service.BoardService;

import jakarta.annotation.Resource;

@Controller
public class TestController {
	@Resource(name = "boardService")
	private BoardService boardService;
	
	//localhost:8081
	@GetMapping("/")
	public String test() {
		boardService.selectBoardList();
		return "index";
	}
	
}

해당 코드를 보면 BoardService를 사용하기 위해서 @Resourse(name = "boardService")작성 해주고, 

사용할 수 있게 boardService 변수를 만들어준다.

 

그리고 BoardService를 만들고 다음과 같이 코드를 입력한다.

package com.study.test.service;

import java.util.List;

import com.study.test.vo.BoardVO;

public interface BoardService {
	//게시글 목록 조회
	List<BoardVO> selectBoardList();
}

간단하게 목록만 조회할 것이기 떄문에 목록조회 메소드만 만들었다.

 

그리고 BoardServiceImpl클래스도 만들어준다.

package com.study.test.service;

import java.util.List;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.study.test.vo.BoardVO;

@Service("boardService")
public class BoardServiceImpl implements BoardService {
	//sqlsession 객체로 모든 DB작업 할 수 있게 해주는 코드
	@Autowired
	private SqlSessionTemplate sqlsession;
	
	//게시글 목록 조회
	@Override
	public List<BoardVO> selectBoardList() {
		//기존코드
		//List<BoardVO> list = sqlsession.selectList("selectBoardList");
		//return list;
		
		//Spring에서 사용하는 코드
		return sqlsession.selectList("selectBoardList");
	}
	
}

중요!! @Autowired는 DB작업을 할 수 있게 해주는 코드로 DB작업을 하려면 꼭 작성을 한다.

그리고 자동으로 Override를 하기 위해서는 

BoardServiceImpl 빨간줄에 커서를 한번 클릭하고 cntl + 1를 누르면 위와 같이 화면이 뜨는데

제일 위에 항목을 누르면 자동으로 Override 자동으로 생성한다.

 

그리고 입력할 데이터를 저장할 BoardVO파일을 만들고 다음과 같이 코드를 작성한다.

package com.study.test.vo;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
public class BoardVO {
	private int boardNum;
	private String title;
	private String writer;
	private String createDate;
	private String content;
	private int readCnt;
}

 

이제 매퍼파일을 해당 위치에 만들고 다음과 같이 코드를 작성한다.

파일 생성 경로

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!-- 해당 파일에 모든 쿼리문을 작성 -->
<mapper namespace="memberMapper">
<!-- type에는 위치정보를 다적어야한다 -->
<resultMap type="com.study.test.vo.BoardVO" id="board">
      <id    column="BOARD_NUM"       property="boardNum"/>
      <result column="TITLE"          property="title"/>
      <result column="WRITER"       property="writer"/>
      <result column="CONTENT"       property="content"/>
      <result column="CREATE_DATE"    property="createDate"/>
      <result column="READ_CNT"       property="readCnt"/>
   </resultMap>
   <select id="selectBoardList" resultMap="board">
	SELECT BOARD_NUM
		, TITLE
		, WRITER
		, TO_CHAR(CREATE_DATE, 'YYYY-MM-DD') CREATE_DATE
		, READ_CNT
	FROM BOARD
	</select>
</mapper>

이건 저번에 만들었던 게시판 기능을 구현한 매퍼파일을 가져왔는데 중요한게 있는데

<resultMap type=""> 여기에 위치를 위와같은 형식으로 작성해줘야한다.

 

마지막으로 파일 두개를 해당 경로에 추가해준다.(로그에 쿼리문과 데이터 조회 결과를 뛰우기 위해)

그리고  아래의 그림에서 해당 경로에 빨간박스의 파일을 연다

해당 파일을 열면 다음과 같이 나오는데 뒤에 // 주석 달린 줄의 코드를 추가해준다.

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.0.4'
	id 'io.spring.dependency-management' version '1.1.0'
}

group = 'com.study'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4:1.16' //쿼리 로그 라이브러리 추가
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.0'
	compileOnly 'org.projectlombok:lombok'
	developmentOnly 'org.springframework.boot:spring-boot-devtools'
	runtimeOnly 'com.oracle.database.jdbc:ojdbc8'	//자동 jar파일 다운 코드
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('test') {
	useJUnitPlatform()
}

그런다음 아래 그림과 같은이 자동 jar파일 다운을 받게 실행한다.

 

이제 프로젝트를 런하고 http://localhost:8081/ 주소로 들어가면 자동적으로 index페이지가 실행 되고

콘솔 로그에 해당과 같이 실행한 쿼리문과 데이터 조회 결과가 다음과같이 나온다.

콘솔 로그

 

끝!

댓글