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>