스프링부트 프로젝트 생성
흐름 이해
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. 클래스 및 인터페이스 생성.