organize/프로젝트

justBoard8 게시판 클래스 작업

001cloudid 2024. 9. 28. 12:47
728x90

게시판의 클래스 작업을 진행할 것이다.

 

BoardDTO

package com.mystory001.domain;

import java.sql.Timestamp;

public class BoardDTO {
	
	private int no;
	private String id;
	private String subject;
	private String content;
	private Timestamp writetime;
	public int getNo() {
		return no;
	}
	public void setNo(int no) {
		this.no = no;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getSubject() {
		return subject;
	}
	public void setSubject(String subject) {
		this.subject = subject;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public Timestamp getWritetime() {
		return writetime;
	}
	public void setWritetime(Timestamp writetime) {
		this.writetime = writetime;
	}

}

 

 

다음으로 Controller와 Service, DAO 그리고 mapper 파일에 어노테이션부터 넣고 시작하려고 한다.

 

BoardController

package com.mystory001.controller;

import javax.inject.Inject;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.mystory001.service.BoardService;

@Controller
@RequestMapping("/board/*")
public class BoardController {
	
	@Inject
	private BoardService boardService;

}

 

@RequestMapping

MemberController와 달리 @RequestMapping 어노테이션이 추가되었다. 이 어노테이션이 무엇인지 먼저 찾아보자.

docs.spring.io에서 찾을 수 있었다. @RequestMapping을 사용하여 요청을 컨트롤러 메소드에 매핑할 수 있다. URL, HTTP, 메소드, 요청 매개 변수, 헤더 및 미디어 유형별로 일치시킬 수 있는 다양한 속성이 있다. 클래스 수준에서 공유 매핑을 표현하거나 메소드 수준에서 특정 엔드 포인트 매핑으로 좁힐 수 있다.

 내가 이해한 것을 설명하자면 경로가 같고 파일명이 다른 파일을 한 번 경로를 설정함으로써 또 작성하지 않게 해줄 수 있다?로 볼 수 있을까 @RequestMapping("/board")를 써줌으로써 @GetMapping/@PostMapping에()안에 "board/"를 작성해주지 않아도 된다.

 더 자세히 정확히 하나라도 알아가야 하므로 열심히 블로그들을 찾아보았다. 그 결과 아주 정리가 잘 된 블로그를 찾았다. https://backendcode.tistory.com/227 여기를 참고하였다. 위치에 따라 역할이 조금 다르다. 메소드와 클래스에 붙일 수 있다. 지금처럼 클래스에 붙였을 때는 공통되는 URL이 있을 때 메소드에 중복되는 value 값을 없앨 수 있다.

 

BoardService

package com.mystory001.service;

import javax.inject.Inject;

import org.springframework.stereotype.Service;

import com.mystory001.dao.BoardDAO;

@Service
public class BoardService {
	
	@Inject
	private BoardDAO boardDAO;

}

 

BoardDAO

package com.mystory001.dao;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;

@Repository
public class BoardDAO {

	@Inject
	private SqlSession sqlSession;
	
	private static final String namespace = "com.mystory001.mappers.boardMapper";
	
}

 

boardMapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mystory001.mappers.boardMapper">


</mapper>

 

기본적인 클래스 작업은 끝났다.

 

글쓰기 주소 매핑하고 insert 페이지를 봤는데(따로 확인은 안 함.. 대략적으로 이런 느낌이겠지 하고 만들어만 둠) 생각보다 만족스러움

제목이랑 내용이 너무 붙어 있어 한 칸이나 두 칸 줄 바꾸기 하고 placeholder 속성을 이용하고 제목 : 내용 : 을 삭제

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>그냥 게시판</title>
</head>
<style>
.container{
	align-content : center;
	width: 1200px;
	height: 600px;
}
.content{
	width: 1000px;
	height: 600px;
}
</style>
<body>
<div class="container"> <%-- container 영역 div --%>

<jsp:include page="../inc/top.jsp" />

<jsp:include page="../inc/sidebar.jsp" />

<div class="content"> <%-- content영역 div --%>
<h1>게시 글 작성</h1>
<form>
<input type="text" name="subject" placeholder="제목을 작성해주세요"><br><br>
<textarea rows="10" cols="50" name="content" placeholder="내용을 입력해주세요."></textarea><br><br>
<input type="submit" value="작성하기">
</form>
</div> <%-- content영역 div --%>
<jsp:include page="../inc/footer.jsp" />
</div> <%-- container 영역 div --%>
</body>
</html>

 

 

작성하기를 누르면 글 번호가 매겨지고 작성 시간은 알아서 매겨질 것이다. 글 번호를 어떻게 매겨야 할까? 떠오르는 방법은 사실 DB에 board 테이블에 no를 auto-increment 속성을 넣어주면 될 것 같다는 생각이 든다. 교육받을 때는 다른 방법으로 한 것 같은데 기억이 안 난다. 프로젝트 때도 auto-increment속성을 사용해서 그런 것 같다. 교육받을 때는 HttpSession 객체와 Model 객체를 이용해서 나타냄. Model 객체도 좀 알아보고 넘어가야 할 것 같다.

Model 객체

 MVC 아키텍처에서 View와 Controller 간 데이터 전달을 담당하는 객체. 로직의 결과를 담아 View에 전달하거나, 사용자 입력을 받아 Controller에 전달하는 역할을 함.

 K-V 쌍의 컨테이너로 사용됨. Controller에서 데이터를 Model에 저장하고, 이를 View에 전달하여 동적으로 생성되는 웹 페이지를 생성함.

//Controller
@GetMapping("/main")
public String main(Model model){
	String str = "Model 객체";
    model.addAttribute("str", str);
    return "main";
    }
    
//main.jsp
(...생략...)
<h1>${str}</h1>
(...생략...)

 

${str} 표현식을 이용해 Model에 저장된 데이터를 사용할 수 있을 것이다.  main.jsp에서 "Model 객체"라는 것이 표시될 것이다.

 즉, Model 객체는 Controller과 View 간의 데이터 전달을 쉽게 처리하기 위한 중간 매개체로 사용됨

출처 :  https://iknowandyouknow.tistory.com/entry/JAVA-spring-model-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

 

BoardController

package com.mystory001.controller;

import java.util.List;

import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import com.mystory001.domain.BoardDTO;
import com.mystory001.service.BoardService;

@Controller
@RequestMapping("/board/*")
public class BoardController {
	
	@Inject
	private BoardService boardService;
	
	/* 게시판 글 들고오기 */
	@GetMapping("/")
	public String main(HttpServletRequest request, Model model) {
		System.out.println("BoardController main()");
		
		List<BoardDTO> boardList = boardService.getBoardList(); //게시물
		
		
		return "/";
	}
	
	/* 글쓰기 */
	@GetMapping("/insert")
	public String insert() {
		System.out.println("BoardController");
		return "board/insert";
	}
	
	@PostMapping("/insertPro")
	public String insertPro() {
		return "";
	}

}

 

BoardService

package com.mystory001.service;

import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Service;

import com.mystory001.dao.BoardDAO;
import com.mystory001.domain.BoardDTO;

@Service
public class BoardService {
	
	@Inject
	private BoardDAO boardDAO;

	public List<BoardDTO> getBoardList() {
		System.out.println("BoardService getBoardList()");
		return boardDAO.getBoardList();
	}

}

 

BoardDAO

package com.mystory001.dao;

import java.util.List;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;

import com.mystory001.domain.BoardDTO;

@Repository
public class BoardDAO {

	@Inject
	private SqlSession sqlSession;
	
	private static final String namespace = "com.mystory001.mappers.boardMapper";

	public List<BoardDTO> getBoardList() {
		System.out.println("BoardDAO getBoardList()");
		return sqlSession.selectList(namespace+".getBoardList");
	}
	
}

 

boardMapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mystory001.mappers.boardMapper">

	<select id="getBoardList" resultType="com.mystory001.domain.BoardDTO">
		select *
		from board
	</select>
</mapper>

 

남은 작업 insert, update, delete 마무리 하기

728x90

'organize > 프로젝트' 카테고리의 다른 글

justBoard10 마무리  (5) 2024.09.30
justBoard9  (1) 2024.09.29
justBoard7 member 마무리, board 준비  (1) 2024.09.26
justBoard6 member  (2) 2024.09.25
justBoard5 화면(view)2  (0) 2024.09.24