Java/Spring

[Spring] 게시판 목록(HikariCP)

퓨어맨 2022. 7. 13. 09:12

pom.xml 

<!-- lombok -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.12</version>
			<scope>provided</scope>
		</dependency>

		<!-- mybatis -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.5.9</version>
		</dependency>

		<!-- mysql-connector-java / mysqlDriver 제공 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.47</version>
		</dependency>

		<!-- spring-jdbc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>4.3.14.RELEASE</version>
		</dependency>

		<!-- Hikari CP -->
		<dependency>
			<groupId>com.zaxxer</groupId>
			<artifactId>HikariCP</artifactId>
			<version>4.0.3</version>
		</dependency>

		<!-- mybatis-spring / spring framework랑 mybatis bridge역할 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.3.2</version>
		</dependency>

<dependency> 태그 안에 라이브러리 추가

 

src/main/java -> kr.smhrd.mapper -> BoardMapper.java

package kr.smhrd.mapper;

import java.util.List;

import kr.smhrd.model.BoardVO;

public interface BoardMapper {
		
	public List<BoardVO> boardList();
	
}

 

src/main/java -> kr.smhrd.mapper -> BoardMapper.xml

<?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="kr.smhrd.mapper.BoardMapper">
    
    <select id="boardList" resultType="kr.smhrd.model.BoardVO">
		select *
		from board
    </select>
    
</mapper>

 

mysql.sql

create table board(
	idx int not null auto_increment,
	title varchar(100) not null,
	writer varchar(10) not null,
	indate datetime default now(),
	contents varchar(2000) not null,
	primary key(idx)
);

insert into board(title,writer,contents) values('제목1', '김재우', '게시판글1');
insert into board(title,writer,contents) values('제목2', '유재석', '게시판글2');
insert into board(title,writer,contents) values('제목3', '이광수', '게시판글3');

 

BoardVO.java

package kr.smhrd.model;

import lombok.Data;

@Data
public class BoardVO {
	
	private int idx;
	private String title;
	private String writer;
	private String indate;
	private String contents;
	
	//★★★★★★★★반드시 table 컬럼명과 class의 field명을 일치 시킬 것!!★★★★★★★★★★★
	
	public int getIdx() {
		return idx;
	}
	public void setIdx(int idx) {
		this.idx = idx;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getWriter() {
		return writer;
	}
	public void setWriter(String writer) {
		this.writer = writer;
	}
	public String getIndate() {
		return indate;
	}
	public void setIndate(String indate) {
		this.indate = indate;
	}
	public String getContents() {
		return contents;
	}
	public void setContents(String contents) {
		this.contents = contents;
	}
	
	
	
}

lombok 라이브러리를 이용해 @Data 어노테이션을 사용하면 생성자나 getter, setter 메소드를 사용할 필요가 없음

(작성자는 오류 때문에 안되어서 getter, setter 메소드 사용)

 

 

src/main/java -> kr.smhrd.web -> BoardController.java

package kr.smhrd.web;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

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

import kr.smhrd.mapper.BoardMapper;
import kr.smhrd.model.BoardVO;

@Controller // FrontController + Controller(POJO)
public class BoardController {
	
	// DB 쿼리문을 수행할 수 있는 인터페이스 생성
	// null pointer exception 뜨면 @Autowired 되어 있는지 확인
	@Autowired
	private BoardMapper mapper;
	
	// 메소드 : public String 메소드명 ()
	@RequestMapping("/basic.do")
	public String basic(HttpServletRequest request) {
		
		List<BoardVO> list = mapper.boardList();

		// forward방식으로 view에 접근
		// : url이 안바뀌고 있기 때문에
		// : 특정 값들을 넘겨주기 위해서는 request 담아서 넘겨주면 된다.
		// : request객체가 필요하면 메소드의 매개변수로 request를 받겠다고 쓰면 된다!
		// ----> Spring framework에서 알아서 관리!
		// ★★★객체 바인딩
		request.setAttribute("list", list);
		
		return "basic"; // 논리적인 주소 -- ViewResolver -- 물리적인 주소
		// basic --> /WEB-INF/views/basic.jsp
	}

}

 

basic.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<!-- bootstrap 사용하기 위해 필요한 라이브러리 3개! -->
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<!-- jQuery library -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<!-- Latest compiled JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<div class = "container">
		<h2>게시판 만들기</h2>
		<div class="panel panel-default">
		  <div class="panel-heading">SpringMVC 게시판</div>
		  <div class="panel-body">
		  	<table class = "table table-bordered table-hover">
		  		<tr>
		  			<td>번호</td>
		  			<td>제목</td>
		  			<td>작성자</td>
		  			<td>작성일</td>
		  		</tr>
		  		
		  		 <%--  
		  		<c:forEach begin="0" end="3" step="1" var="i">
			  		<tr>
			  		<!-- EL 표현식 -->
			  		<!-- : 객체바인딩 된 데이터를 바로 꺼내올 수 있다. -->
			  			<td>${list.get(i).idx}</td>
			  			<td>${list.get(i).title}</td>
			  			<td>${list.get(i).writer}</td>
			  			<td>${list.get(i).indate}</td>
			  		</tr>
		  		</c:forEach>
                		--%>
		  			  		
		  		<c:forEach var = "vo" items="${list}">
			  		<tr>
			  		<!-- EL 표현식 -->
			  		<!-- : 객체바인딩 된 데이터를 바로 꺼내올 수 있다. -->
			  			<td>${vo.idx}</td>
			  			<td>${vo.title}</td>
			  			<td>${vo.writer}</td>
			  			<td>${vo.indate}</td>
			  		</tr>
		  		</c:forEach>
		  		
		  	</table>
		  	</div>
		</div>
	</div>


</body>
</html>