DeseoDeSeo
[Spring] SpringMVC01_ 환경설정 본문
○ 제임스 아서 고슬링 ( java의 아버지 )
○ dispatcher servlet은 모든 요청을 받아들임. --> web.xml
○ controller는 servlet-context.xml 하단에 보면 kr.spring.controller에 있음.
○ DBCP : JDBC 커넥션 풀을 지원 ( --> 오라클이나 mysql등의 dbms들은 특정시간동안 실행이 없으면 해당 세션을 종료함. 따라서 커넥션을 유지하기 위한 별도 설정을 필요로 함.)
⟹ 데이터베이스 커넥션 풀 (Connection pool)은 DB와의 연결을 미리 만들어 두고 사용함으로써 네트워크 연결
작업에 의한 지연을 줄여주기 위해서 사용함.
⟹ 대표적인 커넥션 풀 오픈소스는 Hikaricp, commons-dbcp2, tomcat-jdbc-pool등
○ boardcontroller --> boardmapper --> mybatis --> db
pom.xml에 여러개의 api 추가.
<!-- MyBatis를 사용하기 위한 api추가 -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- conncection Pool을 사용하기 위한 hikari cp추가. -->
<!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.4.1</version>
</dependency>
<!-- MYBATIS 에서 connection을 하기 위한 mySQL Driver API 추가 -->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.42</version>
</dependency>
<!-- Spring에서 Mybatis 를 통해 JDBC를 사용하기 위한 aPI 추가 -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.20.RELEASE</version>
</dependency>
<!-- mybatis와 Spring을 연결해주는 API -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
https://mvnrepository.com/artifact/org.mybatis/mybatis-spring/1.3.2
여기서 다운 받음.
SQL문 작성
프로젝트 클릭 후, new > other > SQL File
type: MySql_5.1
-- SQL 문을 작성 가능 --
CREATE TABLE BOARD(
IDX INT NOT NULL AUTO_INCREMENT,
TITLE VARCHAR(100) NOT NULL,
CONTENT VARCHAR(2000) NOT NULL,
WRITER VARCHAR(300) NOT NULL,
INDATE DATETIME DEFAULT NOW(),
COUNT INT DEFAULT 0,
PRIMARY KEY(IDX)
);
--VO와 TABLE에 만든 변수이름이랑 같아야한다.--
-- 단축키 ALT X--
-- 동시에 여러줄 실행하려면 세미콜론 필수 --
INSERT INTO BOARD(TITLE,CONTENT,WRITER)
VALUES('행복하세요','피자먹어용','냠냠이');
INSERT INTO BOARD(TITLE,CONTENT,WRITER)
VALUES('시카고 피자좋아요','치즈 피자먹어용','뇸뇸이');
INSERT INTO BOARD(TITLE,CONTENT,WRITER)
VALUES('치즈 파스타 ','치즈가 쭉 늘어나용','냠냠이');
INSERT INTO BOARD(TITLE,CONTENT,WRITER)
VALUES('피자 피자 먹고 싶어용','피자먹어용','뇸뇸이');
INSERT INTO BOARD(TITLE,CONTENT,WRITER)
VALUES('피자 먹을래용','피자먹을거에용','냠냠이');
SELECT * FROM BOARD;
root_context.xml
<!-- 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>
<!-- dataSource가 커넥션역할, -->
<!-- HikariDataSource(Connection POOL을 만드는 역할을 한다) -->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
<constructor-arg ref="hikariConfig" />
</bean>
BoardController
package kr.spring.controller;
import java.util.ArrayList;
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.RequestMapping;
import kr.spring.entity.Board;
import kr.spring.mapper.BoardMapper;
@Controller // 현재 클래스를 핸들러맵핑이 찾기 위해 컨트롤러로 등록하는 부분.
public class BoardController {
@Autowired //자동으로 연결하는 거.
private BoardMapper mapper;// mybatis한테 JCBC를 실행하라고 요청하는 객체
/*
* @RequestMapping("/") // 요청url로 들어왔을 때 아래 기능을 수행하겠다. public String home() {
* System.out.println("홈 기능 수행"); return "boardList"; }
*/
@RequestMapping("/boardList.do") // 요청url로 들어왔을 때 아래 기능을 수행하겠다. 보통 메서드도 요청 url앞 부분이랑 맞춰줌.
public String boardList(Model model) {
System.out.println("게시판목록보기 기능수행");
// web-inf > view > boardList생성.
// 실행해서 열리는 페이지의 url에 /boardList.do 붙이면 console창에 게시판목록보기 기능수행이 출력됨.
// 게시글 정보 가져오기
// 전체 게시글 조회기능
// 한 개의 게시물로 하나로 묶음. board (dto)형으로 바꿈
List<Board> list = mapper.getLists();
model.addAttribute("list", list);
return "boardList";
}
}
BoardMapper.java
package kr.spring.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import kr.spring.entity.Board;
@Mapper // MyBatis interFace를 찾기 위해 달아주는 부분.
public interface BoardMapper {
@Select("SELECT * FROM BOARD")
public List<Board> getLists();
}
BoardList.jsp
<%@ 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">
<title>Insert title here</title>
<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.6.4/jquery.min.js"></script>
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</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">
<!-- tr class = success , info , danger, warning, active -->
<tr class="danger">
<td>번호</td>
<td>제목</td>
<td>내용</td>
<td>작성자</td>
<td>작성일</td>
<td>조회수</td>
</tr>
<!-- model 안에 있는 list를 jstl을 활용하여 출력 -->
<c:forEach items ="${list}" var ="vo" varStatus="i">
<tr>
<td> ${i.count}</td>
<td> ${vo.title}</td>
<td> ${vo.content}</td>
<td> ${vo.writer}</td>
<td> ${vo.indate}</td>
<td> ${vo.count}</td>
</tr>
</c:forEach>
</table>
</div>
<div class="panel-footer">스프링게시판-PBK</div>
</div>
</div>
</body>
</html>
'spring' 카테고리의 다른 글
[Spring] SpringMVC01_동기방식 마무리 (0) | 2023.09.12 |
---|---|
[Spring] SpringMVC01_게시판 구현(글쓰기) (0) | 2023.09.07 |
[spring] springMVC 구조 (0) | 2023.09.06 |
[Spring] SpringMVC01 실습01 (0) | 2023.09.05 |
[Spring] spring (0) | 2023.09.04 |