아줌마의 국비학원생활

스프링부트 프로젝트 생성

citygray 2023. 8. 22. 16:39

흐름 이해 

com.boot.example.domain
SubjectVO

src/main/java
com.boot.example.dao
SubjectDAO  => 인터페이스 생성 


src/test/java
com.boot.example.dao
SubjectTests  => 단위 테스트를 위한 클래스 생성

com.boot.example.service
SubjectService => 인터페이스 생성(다형성:결합도가 낮게)
SubjectServiceImpl =>구현 클래스 생성


com.boot.example.controller
SubjectController => controller 클래스 생성
공통매핑: /subject/로 명시

학과리스트 매핑: /subject/subjectList
뷰단: /WEB-INF/views/subject/subjectList.jsp

 

 

 

0. 테이블 생성

create table spring_board(
    b_num number not null,
    b_name varchar2(15) not null,
    b_title varchar2(1000) not null,
    b_content clob,
    b_pw varchar2(18) not null,
    b_date date default sysdate
);

alter table spring_board
add constraint spring_board_pk primary key(b_num);

create sequence spring_board_seq
start with 1
increment by 1
minvalue 1
nocycle
cache 2;

insert into spring_board(b_num, b_name, b_title, b_content, b_pw)
values (spring_board_seq.nextval,'김난이','안녕!','오늘은 화요일! 신난다.','1234')

-- 게시판 조회수 추가
ALTER TABLE spring_board 
ADD readcnt number DEFAULT 0 NOT NULL;

comment on column spring_board.readcnt is '게시판 조회수';



SELECT b_num,b_name,b_title,to_char(b_date,'YYYY-MM-DD') as b_date
	FROM spring_board
	ORDER BY b_name desc

1. project dependencies

2. 구조파악

3. pom.xml - 뷰단 관련 의존성 추가

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>

4. application.properties 파일 인코딩 설정

5. market place - mybatis 설치

6. 패키지 만들기

7. BoardVO작성

package com.spring.client.board.vo;

import lombok.Data;

@Data
public class BoardVO {
	private int b_num		= 0;	//글번호
	private String b_name 	= "";	//작성자
	private String b_title 	= "";	//제목
	private String b_content= "";	//내용
	private String b_date 	= "";	//작성일
	private String b_pwd 	= "";	//비밀번호
	private int readcnt 	= 0;	//조회수

}

8. mybatis-config.xml 설정파일 만들기

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<typeAliases>
		<typeAlias type="com.spring.client.board.vo.BoardVO" alias="board"/>
	</typeAliases>

</configuration>

9.application.properties 세팅

#서버설정
server.port = 8080
server.servlet.context-path=/
server.servlet.encoding.charset=UTF-8

#뷰리졸버 설정
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

#정적 요소 접근 / ** <-- * 두개는 하위 폴더의 모든 경로를 뜻함
spring.mvc.static-path-pattern=/resources/**
spring.web.resources.static-locations=classpath:/static/


#datasource(oracle)
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521/xepdb1
spring.datasource.username=javauser
spring.datasource.password=java1234

# mapper.xml 위치지정
# **은 하위 폴더 레벨에 상관없이 모든 경로를 뜻하며, *는 임의의 이름이 명시되어도 된다는 의미
# xml location
mybatis.mapper-locations=classpath:templates/query/*.xml

#mybatix 매핑 type을 짧게 쓰기 위한 설정
#vo location-  클래스명으로 명칭 사용
#mybatis.type-aliases-package=com.boot.example.domain
mybatis.config-location=classpath:templeates/config/mybatis-config.xml

10. 파일 만들기, 어노테이션 붙이기

 

xml → dao → test →service→ controller→view

 

 

11.Board.xml(MyBatis XML Mapper 파일)

<?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="com.spring.client.board.dao.BoardDao">

<select id="boardList" resultType="board">
	SELECT b_num,b_name,b_title,to_char(b_date,'YYYY-MM-DD') as b_date
	FROM spring_board
	ORDER BY b_name desc
</select>
</mapper>

- mapper에 namespace 변경

- element id 는 dao 메서드명과 일치 시키기

 

12.dao

package com.spring.client.board.dao;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import com.spring.client.board.vo.BoardVO;

@Mapper
public interface BoardDao {
	public List<BoardVO> boardList();

}

 

13.dao test하기

package com.exam.client.board.dao;

import java.util.List;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import com.exam.client.board.vo.BoardVO;

import lombok.Setter;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@SpringBootTest
public class BoardDaoTest {
	
	@Setter(onMethod_ = @Autowired) //2.주입하기
	private BoardDao boardDao; //1.Dao 선언해주고
	
	@Test
	public void boardListTest() {
		log.info("boardList() 실행");
		
		List<BoardVO> list = boardDao.boardList();
		for(BoardVO vo :list) {
			log.info(vo.toString());
		}
	}
}

 

14.service

package com.exam.client.board.sevice;

import java.util.List;

import com.exam.client.board.vo.BoardVO;

public interface BoardService {
	public List<BoardVO> boardList();

}

 serviceImpl

package com.exam.client.board.sevice;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.exam.client.board.dao.BoardDao;
import com.exam.client.board.vo.BoardVO;

import lombok.Setter;

@Service
public class BoardServiceImpl implements BoardService {

	@Setter(onMethod_ = @Autowired)
	private BoardDao boardDao;
	
	@Override
	public List<BoardVO> boardList() {
		List<BoardVO> list = boardDao.boardList();
		return list;
	}

}

 

15. controller  경로 설정

package com.exam.client.board.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import lombok.extern.slf4j.Slf4j;

@Controller
@RequestMapping("/board/*")
@Slf4j
public class BoardController {
	
	@GetMapping("/boardList")
	public String boardList(Model model) {
		log.info("boardList()실행");
		
		
		return "client/board/boardList";
	}
}

 

16 view 단 생성 - jsp 화면에 출력되는지 확인하는 과정

 

<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1"/>
      <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1"/>
      <title>Insert title here</title>
      
 
   </head>
   <body>
      <h1>list 페이지 입니다.</h1>
   </body>

 

17. controller - service에서 list 받아와서 model로 view 단에 전달

package com.exam.client.board.controller;

import java.util.List;

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

import com.exam.client.board.sevice.BoardService;
import com.exam.client.board.vo.BoardVO;

import lombok.Setter;
import lombok.extern.slf4j.Slf4j;

@Controller
@RequestMapping("/board/*")
@Slf4j
public class BoardController {
	
	@Setter(onMethod_ = @Autowired)
	private BoardService boardService;
	
	@GetMapping("/boardList")
	public String boardList(Model model) {
		log.info("boardList()실행");
		
		List<BoardVO> boardList = boardService.boardList();
		model.addAttribute("boardList",boardList);
		return "client/board/boardList";
	}
}

 

18. boardList.jsp - controller에서 받는

model.addAttribute("boardList",boardList);

boardList 리스트 화면에 보여주기

 

<?xml version="1.0" encoding="UTF-8" ?>
<%@ 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 PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1"/>
      <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1"/>
      <title>Insert title here</title>
   </head>
   <body>
      <div class="row">
	     <div class="">
		      <table class="table table-striped">
		      	<thead>
		      		<tr>
		      			<th data-value="b_num" class="order text-center col-md-1">글번호</th>
		      			<th class="order text-center  col-md-3">글제목</th>
		      			<th class="order text-center col-md-1">작성자</th>
		      			<th class="order text-center col-md-2">작성일</th>
		      			<th class="order text-center col-md-1">조회수</th>
		      		</tr>
		      	</thead>
		      	<tbody class="table-striped">
		      		<c:choose>
		      			<c:when test="${not empty boardList}">
			      			<c:forEach var="board" items="${boardList}" varStatus="status">
			      				<tr data-num="${board.b_title}">
			      					<td  class="text-center">${board.b_num}</td>
			      					<td>${board.b_title}</td>
			      					<td class="text-center">${board.b_name}</td>
			      					<td class="text-center">${board.b_date}</td>
			      					<td class="text-center">${board.readcnt}</td>
			      				</tr>
			      			</c:forEach>
		      			</c:when>
		      			<c:otherwise>
		      				<tr>
		      					<td colspan="5" class="tac text-center">등록된 글이 없습니다.</td>
		      				</tr>
		      			</c:otherwise>
		      		</c:choose>
		      		
		      	</tbody>
		      	
		      </table>
		    
		     <div class="contentBtn text-right">
		     	<input type="button" value="글쓰기" id="insertFormBtn" class="btn btn-success">
		     </div>
	     </div>
     	
     </div>
   </body>
</html>

 

 

 

 

프로젝트 생성 후 아래의 내용 순으로 진행하시면 됩니다. 참고해 주세요.
1. 프로젝트 생성
2. pom.xml 설정
3. application.properties 환경설정 파일인 properties 파일 인코딩 변경(UTF-8)
4. 패키지 생성 및 폴더 생성 및 환경 설정에 필요한 파일 생성
5.  application.properties 수정
6. 클래스 및 인터페이스 생성.