주먀

2. 게시글 전체조회하기 / 게시글 추가하기 ( Controller , DAO , DTO ) 본문

학원/Spring

2. 게시글 전체조회하기 / 게시글 추가하기 ( Controller , DAO , DTO )

주먀 2023. 5. 31. 17:42

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 메서드 )

mysql 드라이버!!!

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