Java 관련/SpringBoot

[SpringBoot] 스프링부트에 DB연결하기

씨네 2022. 4. 14. 11:04
728x90

프로젝트를 만들때 spring web과 Mybatis Framework를 체크해줍니다!

Oracle Driver는 버전때문에 안되는 걸로 알고있지만 버전업데이가 되면서 이제는 되는지 한번 체크해서 테스트 해볼게요!

pom.xml에 보면 mybatis가 추가되어있고 ojdbc8버전이 잡혀있네요!

application.properties

# server
server.port=8787

# view
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

# encoding
server.servlet.encoding.charset=UTF-8
server.servlet.encoding.force=true
server.servlet.encoding.enabled=true

# resources
spring.mvc.static-path-pattern=/resources/**

# jdbc
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:xe
spring.datasource.username=kh
spring.datasource.password=kh

# mybatis alias
mybatis.type-aliases-package=com.boot.jdbc.model.dto.MyDto

#server 부분은 서버의 포트를 정해줍니다.

#view는 prefix와 suffix설정을 합니다.

#encoding에서 UTF-8설정을합니다.

#resources는 css같은 파일을 쓰고싶으면 연결해줍니다.

#jdbc는 db계정을 연결합니다.

#mybatis는 alias를 잡아줍니다!

StartBoot02Application.java

package com.boot.jdbc;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;

@SpringBootApplication
public class StartBoot02Application {

	public static void main(String[] args) {
		SpringApplication.run(StartBoot02Application.class, args);
	}
	
	@GetMapping("/")
	public String root() {
		return "index";
	}

}

index,jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" href="resources/css/style.css" />
</head>
<body>

	<h1>Hello, Boot!</h1>
	
	<a href="">list</a>

</body>
</html>

src/main안에 webapp/WEB-INF/views를 만들고 index.jsp를 만듭니다!

src/main/resources아래 static 아래에 css폴더를 만들고 style.css를 만들어주세요!

style.css

a {
	font-size: 50px;
}

실행시키면 잘뜹니다!

db연결을 위해 테이블을 만들어야하는데요.

이번에는 src/main/resources아래에 db폴더를 만들고 myboard.sql파일을 만들겠습니다.

myboard.sql

DROP SEQUENCE MYNOSEQ;
DROP TABLE MYBOARD;

CREATE SEQUNCE MYNOSEQ;

CREATE TABLE MYBOARD(
	MYNO NUMBER PRIMARY KEY,
	MYNAME VARCHAR2(500) NOT NULL,
	MYTITLE VARCHAR2(1000) NOT NULL,
	MYCONTENT VARCHER2(4000) NOT NULL,
	MYDATE DATE NOT NULL
);

INSERT INTO MYBOARD
VALUES(MYNOSEQ.NEXTVAL, '관리자', '제목 테스트', '내용 테스트', SYSDATE);

SELECT MYNO, MYNAME, MYTITLE, MYCONTENT, MYDATE
FROM MYBOARD;

이렇게 패키지를 만들어주시고 다른거는 다 똑같지만 Mapper가 마이바티스의 Mapper와 Dao를 합친부분입니다!

package com.boot.jdbc.model.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import com.boot.jdbc.model.dto.MyDto;

@Mapper
public interface MyBoardMapper {
	
	@Select(" SELECT MYNO, MYNAME, MYTITLE, MYCONTENT, MYDATE FROM MYBOARD ORDER BY MYNO DESC ")
	List<MyDto> selectList();
	
	@Select(" SELECT MYNO, MYNAME, MYTITLE, MYCONTENT, MYDATE FORM MYBOARD WHERE MYNO = #{myno} ")
	MyDto selectOne(int myno);
	
	@Insert(" INSERT INTO MYBOARD VALUES(MYNOSEQ.NEXTVAL, #{dto.getMyname}, #{mytitle}, #{dto.mycontent}, SYSDATE) ")
	int insert(MyDto dto);
	
	@Update(" UPDATE MYBOARD SET MYTITLE = #{mytitle}, MYCONTENT=#{mycontent} WHERE MYNO = #{myno}  ")
	int update(MyDto dto);
	
	@Delete(" DELETE FROM MYBOARD WHERE MYNO = #{myno} ")
	int delete(int myno);

}

엄청 간단해졌죠?

mybatis spring boot 설명이 있는 링크입니다.

@Mapper 어노테이션을 통해서 Mapper로 만들어주며 application.properties파일에 있는

mybatis.type-aliases-package=com.boot.jdbc.model.dto.MyDto

이 코드가 config파일에서 alias를 잡아줬던것 처럼 alias를 잡아줍니다!

이번에는 com.boot.jdbc.controller 패키지를 만들고 MyBoardController파일을 만듭니다!

package com.boot.jdbc.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.boot.jdbc.model.biz.MyBoardBiz;

@Controller
@RequestMapping("/myboard")
public class MyBoardController {

	@Autowired
	private MyBoardBiz biz;
	
	
	public String selectList(Model model) {
		
		model.addAttribute("list", biz.selectList());
		
		return "myboardlist";
	}
	
}

selectList를 위한 코드입니다!

이제 views에 myboardlist.jsp 파일을 만들겠습니다.

만들기 전에 jstl을 쓰기위해 pom.xml에 디펜던시 하나 추가하겠습니다!

<!-- jstl --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency>

이제 myboardlist.jsp를 만들어볼까요?

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h1>LIST</h1>

	<table border="1">
		<col width="50" />
		<col width="100" />
		<col width="500" />
		<col width="100" />
		<tr>
			<th>번호</th>
			<th>작성자</th>
			<th>제목</th>
			<th>작성일</th>
		</tr>
		<c:choose>
			<c:when test="${empty list }">
				<tr>
					<th colspan="4">----------작성된 글이 없습니다----------</th>
				</tr>
			</c:when>		
			<c:otherwise>
				<c:forEach items="${list }" var="dto">
					<tr>
						<td>${dto.myno }</td>
						<td>${dto.myname }</td>
						<td><a href="detail.do?myno=${dto.myno }">${dto.mytitle }</a></td>
						<td>${dto.mydate }</td>
					</tr>
				</c:forEach>
			</c:otherwise>
		</c:choose>
		<tr>
			<td colspan="4" align="right"><input type="button" value="글작성" onclick="location.href='writeform.do'"></td>
		</tr>
	</table>
</body>
</html>

이후 실행시키면 잘 실행이 됩니다!

ojdbc8로도 잘 되네요~


수정할때마다 서버를 껏다가 다시켜야 작동을 하는데요.

<!-- devtools -->
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>

pom.xml에 devtools를 추가해주면 그렇게 하지않아도 작동이됩니다.

프로젝트 만들때 체크하는거에서 체크하면 자동으로 잡아줍니다!

728x90