주먀
2. 게시글 전체조회하기 / 게시글 추가하기 ( Controller , DAO , DTO ) 본문
1. 라이브러리 로드 ( pom.xml에서 하기 )
2. https://mvnrepository.com/ 접속 -> 1.18.24클릭 -> pom.xml 로드
1. kr.smhrd.mapper 파일명 패키지 만들기 -> BoardMapper 파일명 클래스 만들기
2. 컨트롤러에서 DAO 생성-> 밑줄체크 메소드 -> Board dao 출발
3. DAO
package kr.smhrd.mapper;
import java.util.ArrayList;
import java.util.Date;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import kr.smhrd.model.Board;
public interface BoardMapper {
// DAO 역할을 하는 클래스
// 1. 전체 게시글을 조회하는 기능
public ArrayList<Board> getList();
// 추상메소드
// SpringContainser에 적재되어있는
// SqlSessionFactoryBean클래스가 알아서 작동시킴~!
///////////////////////////////////////////////////////////////////////
// SqlSession session = SqlSessionFactory.openSession(true);
// ArrayList<Board> list = session.selectList("getList");
// session.close();
// // 생성한 게시글을 리턴
// return list;
///////////////////////////////////////////////////////////////////////
}
4. DTO ( Board.java )
4-1. kr.smhrd.model 파일명 패키지 만들기 -> Board 파일명 클래스 만들기
package kr.smhrd.model;
import java.util.Date;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor // 기본 생성자 생성
@AllArgsConstructor // 모든 필드에 데이터를 집어넣은 생성자
@Data // getter, setter, toString메소드 생성
public class Board {
// 우리의 웹페이지에서 사용할 새로운 사용자 정의 자료형
// DTO, VO 역할하는 클래스
// 작성자, 게시글제목, 내용, 작성일, 게시글번호
private String writer;
private String title;
private String content;
private Date indate;
private int num;
}
5. BoardController
5-1. list -> 루트이다!
5-2. vo -> 자료형이다!
package kr.smhrd.web;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import kr.smhrd.mapper.BoardMapper;
import kr.smhrd.model.Board;
// servlet-context.xml에 scan 지정이 되어있음
// POJO와 같이 어노테이션(@Controller, @RestController 등)이 붙은 class scan
// 이것만 잘 적어주면 spring이 알아서 스캔해줄거임
@Controller // POJO임을 명시
public class BoardController {
// 실제 요청을 처리할 POJO
// 1-1) Mapper(DAO) 생성
@Autowired // --> Spring Container에 위치하고 있는
// SqlSessionFactoryBean 구현체를 받아와서 연결
private BoardMapper mapper;
// 요청이 들어왔을 때, 무슨 일을 할건지 정해주자 --> method 정의
// /list 라는 요청 들어오면, boardList.jsp로 이동하겠다.
@RequestMapping("/list") // @RequestMapping 달고 UrlMapping 지정
public String list(Model model) {
// request가 필요하면 메소드의 매개변수에 선언을 하게 되면,
// Spring Container가 자동으로 request를 채워준다.
// Model == request 경량화 버전
// SpringFramework에서는 request객체 대신 Model 사용한다.
// 1. 게시글 데이터를 DB에서 조회해서 가져오기
// 1-2) mapper 사용
ArrayList<Board> list = mapper.getList();
// 2. 조회한 데이터를 request에 담아서
model.addAttribute("list", list);
// 3. boardList.jsp 로 forward방식으로 이동
return "boardList"; // /WEB-INF/View/boardList.jsp ->root-context.xml에 들어있음
// boardList : 논리적인 주소값
// /WEB-INF/View/boardList.jsp : 물리적인 주소값 변환 해줌(Spring 내부 객체가)
}
// boardInsert로 GET방식 요청이 들어왔을 때
@RequestMapping("/boardInsert")
public String boardInsert() {
// boardInsert.jsp로 forward 이동
return "boardInsert";
}
// boardInsert로 Post방식 요청이 들어왔을 때
// 동일한 url mapping이더라도 요청방식에 따라서 다른 메소드를 연결해줄 수 있다!!
// @RequestMapping(value="/boardInsert",method=RequestMethod.POST)
@PostMapping("/boardInsert")
public String boardInsert(Board vo) {
System.out.println("파라미터 수집 >>" + vo);
return null;
}
}
6. BoardList.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>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">
<!-- jQuery library -->
<script
src="https://cdn.jsdelivr.net/npm/jquery@3.6.4/dist/jquery.slim.min.js"></script>
<!-- Popper JS -->
<script
src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
<!-- Latest compiled JavaScript -->
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
<div class="jumbotron jumbotron-fluid">
<div class="container">
<h1>Spring Framework 게시판</h1>
<p>spring MVC를 이용해서 간단한 게시판을 만들어봅시다~</p>
</div>
</div>
<div class="container">
<div class="card">
<div class="card-header">빅데이터 분석서비스 개발자과정 게시판</div>
<div class="card-body">
<table class="table table-bordered table-hover" border = '1'>
<tr>
<th>번호</th>
<th>제목</th>
<th>작성자</th>
<th>작성일</th>
</tr>
<!-- jstl 문법을 써서 반복 -->
<c:forEach items="${list}" var="b">
<tr>
<td>${b.num}</td>
<td>${b.title}</td>
<td>${b.writer}</td>
<td>${b.indate}</td>
</tr>
</c:forEach>
<tr>
<td colspan="4">
<button class="btn btn-success btn-sm" onclick="location.href='boardInsert'">글쓰기</button>
</td>
</tr>
</table>
</div>
<div class="card-footer">Spring 마스터를 해봅시다.</div>
</div>
</div>
</body>
</html>
7. BoardInsert.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>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.4/dist/jquery.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
<div class="container">
<div class="card">
<div class="card-header">Panel Heading</div>
<div class="card-body">
<form action="boardInsert" method="post">
<div class="form-group">
<label for="title" >제목: </label>
<input type="text" name="title" class="form-control" placeholder="제목입력" id="title">
</div>
<div class="form-group">
<label for="writer">작성자: </label>
<input type="text" name="writer" class="form-control" placeholder="작성자 입력" id="writer">
</div>
<label>내용: </label>
<div class="form-group form-check">
<label class="form-check-label">
<textarea name="content" rows="10px" cols="109px"></textarea>
</label>
</div>
<button type="submit"class="btn btn-primary" >작성하기</button>
</form>
</div>
<div class="card-footer">Spring 마스터를 해봅시다.</div>
</div>
</div>
</body>
</html>
* jsp 부트스트랩 사용 *
1. c드라이브 -> 이고브
2. 스타트업 실행 시 오류났을때 : c언어 다운로드 사이트 : https://www.microsoft.com/ko-KR/download/details.aspx?id=40784 -> 64비트
Download Visual Studio 2013용 Visual C++ 재배포 가능 패키지 from Official Microsoft Download Center
중요! 아래에서 언어를 선택하면 전체 페이지 내용이 해당 언어로 신속하게 변경됩니다. 독일어러시아어스페인어영어이탈리아어일본어중국어(간체)중국어(번체)프랑스어한국어 다운로드 Visual
www.microsoft.com
* MySQL 연결 *
1. 3306있는지 확인하기!
2. com 더블클릭 -> 오라클 연결
3. sql구문
/* 테이블 생성하기
* 테이블명 : board ( vo의 이름이랑 테이블명 일치시켜주기 )
* 컬럼명 ( vo의 필드명이랑 일치시켜주기 )
* - 게시글 번호 num PK , 자동으로 증가
* - 작성자 writer
* - 내용 content
* - 작성일 indate 현재날짜
* - 제목 title
**/
CREATE TABLE BOARD(
NUM INT NOT NULL AUTO_INCREMENT,
TITLE VARCHAR(200) NOT NULL,
CONTENT VARCHAR(1000) NOT NULL,
WRITER VARCHAR(50) NOT NULL,
INDATE DATETIME DEFAULT NOW(),
PRIMARY KEY(NUM)
); /* 실행 단축키 : ALT X */
INSERT INTO BOARD(WRITER, TITLE, CONTENT)
VALUES('김은영', 'DB게시글1', '게시글입니다1');
INSERT INTO BOARD(WRITER, TITLE, CONTENT)
VALUES('김줌이', 'DB게시글2', '게시글입니다2');
INSERT INTO BOARD(WRITER, TITLE, CONTENT)
VALUES('이수하', 'DB게시글3', '게시글입니다3');
SELECT * FROM BOARD;
CREATE TABLE BOARD(
NUM INT NOT NULL AUTO_INCREMENT,
WRITER VARCHAR(50) NOT NULL,
CONTENET VARCHAR(1000) NOT NULL,
INDATE DATETIME DEFAULT NOW(),
TITLE VARCHAR(200) NOT NULL,
PRIMARY KEY(NUM)
);
INSERT INTO BOARD(WRITER, TITLE, CONTENT)
VALUES('김주미', '뇨뇨', '내용이다' );
SELECT * FROM BOARD;
* XML 로드 *
1. mysql 로드
2. HikariCP 로드
3. mybatis 로드
검색 -> 3.5.6버전다운 -> 디펜스가져오기 -> 폼 로드
연결프레임워크 로드 -> 2.0.6버전 -> 로드
4. Spring JDBC 로드 -> 스프링 버전이랑 같이 4.3.20 로드
* XML 순서 *
1. pom.xml
-> Maven 웹 프로젝트에 대한 설정
2. web.xml
-> 웹에 대한 설정 파일 ( 배치기술자 )
-> Deployment Descrpitor
3. root-context.xml ( bean -> 객체 )
-> Spring 환경설정 ( DB 연결 설정 기술 )
4. servlet-context.xml
-> Spring 환설정 ( Dispatcher Servlet / FC 설정 )
5. root-context.xml
1. 클래스 이름 복사 붙이기
2. <bean class="com.zaxxer.hikari.HikariConfig"> </bean> 클래스 확장자는 있으니깐 지워도 됨
3. 메서드 확인할때 변수 확인 ( seter 메서드 )
4. SQL 프로포티
5. root-context.xml
<?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">
<!-- schema에 대한 정의! schema == xml파일에서 사용하고 싶은 태그를 정의해놓은 파일 -->
<!-- beans 라는 태그들을 사용하겠다! -->
<!-- Root Context: defines shared resources visible to all other web components -->
<!-- 뜻 : 다른 모든 웹 구성 요소에 표시되는 공유 리소스 정의 -->
<!-- shared resources == DB -->
<!-- 1) HikariConfig( DB연결을 위한 데이터 기술 ) 생성 -->
<!-- HikariConfig hikariConfig = new HikariConfig() -->
<!-- hikariConfig.setXXXX(drivername); hikariConfig.setXXXX(jdbcURL); hikariConfig.setXXXX(username);
hikariConfig.setXXXX(password); -->
<bean class="com.zaxxer.hikari.HikariConfig" id="hikariConfig">
<property name="driverClassName"
value="com.mysql.jdbc.Driver" /> <!-- seter 메서드 -->
<!-- DataSoruceExplorer - 연결된 com계정 선택 - properties - Driver Properties
-jdbcrul -->
<property name="jdbcUrl"
value="jdbc:mysql://localhost:3306/com" />
<property name="username" value="com" />
<property name="password" value="com01" />
</bean>
<!-- 2) DBCP 생성 : HikariDataSource -->
<bean class="com.zaxxer.hikari.HikariDataSource" id="dataSource">
<constructor-arg ref="hikariConfig" />
</bean>
<!-- 3) SqlSessionFactoryBean 객체 생성 -->
<!-- : Connection 객체를 빌려서 사용하는 객체!!! -->
<!-- : Mapper interface 구현체 역할을 담당!!! -->
<!-- id는 변수를 줄 때 사용한다. -->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 4) 구현해야하는 mapper 파일의 위치 등록하기 -->
<mybatis-spring:scan base-package="kr.smhrd.mapper"/>
<!--
public class SqlSessionFacroryBean implements BoardMapper{
@Override
public ArrayList<Board> getList();{
session.selectList(getList);
return list;
}
}
SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); -->
</beans>
'학원 > Spring' 카테고리의 다른 글
5. piechart 그리기 (0) | 2023.06.09 |
---|---|
4. 차트 그리기 ( 전체 조회하기 ) (0) | 2023.06.07 |
3. 게시판 조회하기 (0) | 2023.06.05 |
1. Spring 시작 (0) | 2023.05.30 |
Spring 프레임 워크 다운 (0) | 2023.05.30 |