

package kr.board.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller // Controller가 되기 위해 어노테이션으로 명시
public class BoardController {
// 게시판 전체조회 기능 - boardList.do
@RequestMapping("/boardList.do") // 아래 메소드와 url을 연결
public String boardList() {
System.out.println("게시판 전체 조회 기능");
return "boardList";
}
}


View Resolver를 통하여 최종 경로 받아서 화면에 출력된다~~

🚫 주의 🚫
boarList.jsp에서 바로 실행하면 해당 페이지 안 나온다.
WEB-INF는 정보가 들어있는, 외부에서 바로 접근할 수 없는 보안 폴더이고
-> 무조건 Dispatcher Servlet - Controller - View를 통해서만 접근이 가능하다.
-> 그래서 boarList.jsp에서 바로 실행하면 해당 페이지 안 나온다.

package명에 entity라고 붙이고
vo 만들 때 class명을 vo라고 붙이지 않는다~
Java에서 반복되는 메서드를 Anntation을 사용해 자동으로 작성해주는 라이브러리이다.
Model 클래스나 Entity와 같은 도메인 클래스 등에는 여러 속성이 존재하고 이들이 갖는 프로퍼티에 대해서 Getter, Setter, Constructor 등을 매번 작성해줘야 하지만
Lombok의 어노테이션을 이용하는 것만으로 자동으로 코드를 작성해줘 편리하다.
https://mvnrepository.com/search?q=lombok

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>
복사해주기!!

[참고] pom.xml을 통해 spring version 바꿀 수 있음.


<dependencies> 아래에 원하는 API 넣으면 된다.


lombok 설치 끝
@Data: getter, setter 자동생성
@NoArgsConstructor: 파라미터가 없는 기본 생성자 생성
@AllArgsConstructor: 모든 필드 값을 파라미터로 받는 싱성자 생성
@ToString: 해당 클래스 변수들의 toString 메서드 자동 완성
package kr.board.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data // getter, setter 생성
@AllArgsConstructor // 생성자 생성
@NoArgsConstructor // 기본 생성자 생성
@ToString
public class Board {
private int idx; // 번호
private String title; // 글 제목
private String contents; // 글 내용
private String writer; // 작성자
private String indate; // 작성일
private int count; // 조회수
}
lombok 어노테이션을 이용하여
getter, setter, 생성자, 기본생성자 생성해주고 tostring 자동완성 시키기


✅ Spring에서는 기본 생성자가 필수다 !!!!
package kr.board.controller;
import java.util.ArrayList;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import kr.board.entity.Board;
@Controller // Controller가 되기 위해 어노테이션으로 명시
public class BoardController {
// 게시판 전체조회 기능 - boardList.do
@RequestMapping("/boardList.do") // 아래 메소드와 url을 연결
public String boardList(Model model) {
System.out.println("게시판 전체 조회 기능");
// 게시글 정보 가져오기
// 게시글 - 번호, 제목, 내용, 작성자, 작성일, 조회수
// 한꺼번에 저장해주기 위해 VO 만들어준다
Board vo1 = new Board(1, "추석 연휴", "9월 14일부터 9월 18일 5일간 연휴", "Spring", "2024-08-28", 917);
Board vo2 = new Board(2, "추석은 송편 먹는 날", "밤송편, 팥송편, 동부송편.. 추릅", "9월 최고", "2024-09-01", 999);
Board vo3 = new Board(3, "크리스마스", "크리스마스는 케이크 먹는 날", "Winter", "2024-12-24", 1225);
Board vo4 = new Board(4, "내 생일에", "삼시오끼 먹기 목표", "Autumn", "2024-11-22", 1122);
Board vo5 = new Board(5, "태국 여행", "내년에 가족들이랑 같이 갈 거임 재밌겠다", "Summer", "2024-10-01", 1001);
ArrayList<Board> list = new ArrayList<Board>();
list.add(vo1);
list.add(vo2);
list.add(vo3);
list.add(vo4);
list.add(vo5);
model.addAttribute("list", list);
// model은 request 안에 있다.
// forward 이동방식
return "boardList"; // 진짜 경로는? WEB-INF/views/boardList.jsp
}
}
https://www.w3schools.com/bootstrap/tryit.asp?filename=trybs_panels_footer&stacked=h
link, script 복사해서 head에 넣고, body에 원하는 부분 넣어주기
<%@ 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">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<title>boardList.jsp</title>
</head>
<body>
<div class="container">
<h2>Spring MVC01</h2>
<div class="panel panel-default">
<div class="panel-heading">Board</div>
<div class="panel-body">
<table class="table table-bordered table-hover">
<thead>
<tr>
<td>번호</td>
<td>제목</td>
<td>작성자</td>
<td>작성일</td>
<td>조회수</td>
</tr>
</thead>
<tbody>
<!-- 게시글 내용 출력 -->
<c:forEach items="${list}" var="list">
<tr>
<td><c:out value="${list.idx}"/></td>
<td><c:out value="${list.title}"/></td>
<td><c:out value="${list.writer}"/></td>
<td><c:out value="${list.indate}"/></td>
<td><c:out value="${list.count}"/></td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
<div class="panel-footer">AISCHOOL2024 - Fighting :]</div>
</div>
</div>
</body>
</html>
✅ Spring에서는 기본적으로 forward 이동방식을 사용한다.


Data Sourcr Explorer에서 com 클릭하여 연결해주기
Eclipse-mySQL 연결해준 것

package kr.board.mapper 생성해주기
sql문 여기에 저장




실행은 Alt+X


<!-- MySQL Driver API -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.42</version>
</dependency>
<!-- Spring JDBC API -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!-- DBCP(DataBase Connection Pool) API -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.4.1</version>
</dependency>
<!-- MyBatis API -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- MyBatis Spring API -->
<!-- MyBatis와 Spring을 연결해줌 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
원래 JAVA에서는 DB이용시 적어야 할 게 많았는데
'1. 어떤 DBMS , 2. DB 주소, 3. 계정, 비밀번호'
MyBatis를 이용하여 DB와 쉽게 연결할 수 있다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Root Context: defines shared resources visible to all other web components -->
<!-- API(HikariCP) -->
<!-- bean : 객체를 생성하는 태그 -->
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/com"/>
<property name="username" value="com"/>
<property name="password" value="com01"/>
</bean>
<!-- HikariDataSource(Connection POOL을 만드는 역할을 한다) -->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
<constructor-arg ref="hikariConfig" />
</bean>
<!-- Mapper interface들을 메모리에 올리는 방법(scan) -->
<mybatis-spring:scan base-package="kr.board.mapper"/>
<!-- BoardMapper interface의 구현클래스 생성
SqlSessionFactoryBean(SQL을 실행하는 API) -->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>
</beans>


package kr.board.mapper;
import java.util.ArrayList;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import kr.board.entity.Board;
@Mapper // Mapper로 인식하기 위한 어노테이션
public interface BoardMapper {
@Select("SELECT * FROM BOARD")
public ArrayList<Board> boardList();
}
package kr.board.controller;
import java.util.ArrayList;
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 kr.board.entity.Board;
import kr.board.mapper.BoardMapper;
@Controller // Controller가 되기 위해 어노테이션으로 명시
public class BoardController {
@Autowired // interface를 사용해도 객체 생성을 할 수 있게 한다
private BoardMapper mapper;
// 게시판 전체조회 기능 - boardList.do
@RequestMapping("/boardList.do") // 아래 메소드와 url을 연결
public String boardList(Model model) {
System.out.println("게시판 전체 조회 기능");
ArrayList<Board> list = mapper.boardList();
model.addAttribute("list", list);
// model은 request 안에 있다.
// forward 이동방식
return "boardList"; // 진짜 경로는? WEB-INF/views/boardList.jsp
}
}
