본문 바로가기
Coding/spring

Aquerytool를 사용해서 게시판 만들어보기!

by 찡콩찡 2022. 9. 30.

https://aquerytool.com/

 

AQueryTool

{{source.erd_info.erd_name + '(Ver ' + erdVersion + ', ' + source.erd_info.db_type + ')'}}

aquerytool.com

ORACLE에 있는 TABLE 의 SQL문을 복사한다. 

aqeury 홈페이지를 들어간다.

 


 

 

 

 

 

-- Insert
INSERT INTO BBS
    (BBS_NO, 
    BBS_TITLE, 
    BBS_CONTENT, 
    BBS_WRITER, 
    BBS_REG_DATE, 
    BBS_COUNT)
VALUES
    (1, 
    'N', 
    'BBS_CONTENT 1', 
    'N', 
    sysdate, 
    1);

-- Insert된 Row의 Auto Increment값 조회
SELECT BBS_SEQ.CURRVAL FROM DUAL;

-- Update
UPDATE BBS
SET
    BBS_NO = 1, 
    BBS_TITLE = 'N', 
    BBS_CONTENT = 'BBS_CONTENT 1', 
    BBS_WRITER = 'N', 
    BBS_REG_DATE = sysdate, 
    BBS_COUNT = 1
WHERE BBS_NO = 1;

-- Delete
DELETE FROM BBS
WHERE BBS_NO = 1;

-- 1일이 지난 데이터 삭제
DELETE FROM BBS
WHERE BBS_REG_DATE < SYSDATE - 1;

(servive랑 dao파일은 package명 바꿔주면서 바뀌어 있었다! )

ServiceImpl 안에 변수명 같이 바꿔주기 art_shift+r

package com.exam.myapp.bbs;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class BbsServiceImpl implements BbsService {
	@Autowired
	private BbsDao BbsDao;
	
	@Override
	public List<BbsVo> selectList() {
		return BbsDao.selectList();
	}

	@Override
	public int insert(BbsVo vo) {
		return BbsDao.insert(vo);
	}

	@Override
	public BbsVo select(BbsVo vo) {
		return BbsDao.select(vo);
	}

	@Override
	public int update(BbsVo vo) {
		return BbsDao.update(vo);
	}

	@Override
	public int delete(BbsVo vo) {
		return BbsDao.delete(vo);
	}

}

controller도 변수명을 바꿔준다.

package com.exam.myapp.bbs;


import java.util.HashMap;
import java.util.List;
import java.util.Map;


import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/bbs/")
public class BbsController {
	@Autowired
	private BbsService bbsService;
	
	@RequestMapping(path = "list.do", method = RequestMethod.GET)
	public String list(Model model) {
		List<BbsVo> list = bbsService.selectList();
		model.addAttribute("bbsList", list);
		return "bbs/list";
	}
	
	@RequestMapping(path = "add.do", method = RequestMethod.GET)
	public String addform(BbsVo vo) {
		return "bbs/add";
	}
	
	@RequestMapping(path = "add.do", method = RequestMethod.POST)
	 
	public String add(@Valid BbsVo vo, BindingResult bindingResult) {
//		if (bindingResult.hasErrors()) { //검증결과 에러가 있다면

//			return "bbs/add"; //회원추가 jsp 화면을 다시 출력
//		}
		int num = bbsService.insert(vo);
		return "redirect:/bbs/list.do";
	}
	
	@RequestMapping(path = "edit.do", method = RequestMethod.GET)
	public String editform(BbsVo vo, Model model) {
		BbsVo mvo = bbsService.select(vo);
		model.addAttribute("bbsVo", mvo);
		return "bbs/edit";
	}
	
	@RequestMapping(path = "edit.do", method = RequestMethod.POST)
	public String edit(@ModelAttribute("bbsVo") @Valid BbsVo vo, BindingResult bindingResult) {
//		if (bindingResult.hasFieldErrors("bbsName") || bindingResult.hasFieldErrors("bbsPoint")) {			
//			return "bbs/edit";
//		}
		
		int num = bbsService.update(vo);
		return "redirect:/bbs/list.do";
	}
	
	@RequestMapping(path = "del.do", method = RequestMethod.GET)
	public String del(BbsVo vo) {
		int num = bbsService.delete(vo);
		return "redirect:/bbs/list.do";
	}
	
	@RequestMapping(path = "check.do", method = RequestMethod.POST)
	@ResponseBody
	public Map<String, Object> checkId(BbsVo vo) {
		BbsVo mvo = bbsService.select(vo);
		
		Map<String,Object> map = new HashMap<String, Object>();
		map.put("result", mvo==null ); //사용가능한경우 {result:true}, 불가능한경우 {result:false} 
		
		return map;
	}
	
}

BbsMapper namespace 명을 bbsdao 경로를 맞춰준다

경로를 맞춰줘서 자동완성이 뜬다

 <select id="select" resultType="BbsVo">
  	SELECT BBS_NO, BBS_TITLE, BBS_CONTENT, BBS_WRITER, BBS_REG_DATE, BBS_COUNT
	FROM BBS
	WHERE BBS_NO = #{bbsNo}
  </select>
  <insert id="insert">
  	INSERT INTO BBS
    (BBS_NO, 
    BBS_TITLE, 
    BBS_CONTENT, 
    BBS_WRITER, 
    BBS_REG_DATE, 
    BBS_COUNT)
	VALUES
	    (BBS_SEQ.NEXTVAL, 
	  #{bbsTitle},
	  #{bbsContent},
	  #{bbsWriter},
	    sysdate, 
	    0)
  </insert>
<update id="update">
  	UPDATE BBS
	SET
	    BBS_TITLE = #{bbsTitle}, 
	    BBS_CONTENT = #{bbsContent} 
	WHERE BBS_NO = #{bbsNo}
  </update>
<delete id="delete">
  	DELETE FROM BBS
	WHERE BBS_NO = #{bbsNo}
  </delete>

jsp를 만들러 간다

list.jsp를 만들어준다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    

<div class="row">
    <div class="col">
	<h1>게시글목록</h1>
	<a href="${pageContext.request.contextPath}/bbs/add.do">
		<button type="button" class="btn btn-primary" ><i class="bi-plus-circle"></i> 새 글쓰기</button>
	</a>
	<table class="table table-striped">
		<thead>
			<tr class="table-dark"><th>제목</th><th>작성자</th><th>등록일</th></tr>
		</thead>
		<tbody>
			<c:forEach var="vo" items="${bbsList}" >
				<tr>
					<td><a href="${pageContext.request.contextPath}/bbs/edit.do?bbsNo=${vo.bbsNo}"><c:out value="${vo.bbsTitle}" /></a></td>
					<td><c:out value="${vo.bbsWriter}" /></td>
					<td>${vo.bbsRegDate}</td>
				</tr>
			</c:forEach>
		</tbody>
	</table>
	</div>
</div>

add.jsp를 추가한다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>    

<script type="text/javascript">
	$(function() { //문서 로드가 완료된 후 실행
		var idChecked = false; //아이디중복확인여부
		
		$('#memForm').on('submit', function(e){ //id=memForm 인 폼 엘리먼트 제출(submit)시 실행
			if (!idChecked) {
				alert('아이디 중복확인이 필요합니다.');
				return false;
			} 
			if ( $('#memPass').val() != $('#memPassCheck').val() ) {
				alert('비밀번호 입력이 서로 다릅니다.');
				return false; //e.preventDefault(); 
			}
		});
		$('#dupBtn').on('click', function() {
			$.ajax({
				url: "${pageContext.request.contextPath}/bbs/check.do",
				method: "post",
				data: { memId: $('#memId').val() },
				dataTypes: 'json'
			}).done(function(resp) {
				console.log( resp );
				idChecked = resp.result;
				if (resp.result){ //사용가능한 아이디
					alert('사용가능한 아이디입니다.');
// 					$('#saveBtn').prop('disabled', false);
// 					$('#dupBtn').prop('disabled', true);
				}else { //이미 존재하는 아이디
					alert('이미 존재하는 아이디입니다.');
// 					$('#saveBtn').prop('disabled', true);
// 					$('#dupBtn').prop('disabled', false);
				}
				
			}).fail(function(jqXHR,textStatus) {
				alert('아이디 중복 확인 요청 실패!');
			});
		});
		
		$('#memId').on('change', function() {
			idChecked = false;
// 			$('#saveBtn').prop('disabled', true);
// 			$('#dupBtn').prop('disabled', false);
		});
	
	});


</script>

<div class="row">
    <div class="col">
	<h1>게시글등록</h1>
	<form:form modelAttribute="bbsVo" id="memForm" action="${pageContext.request.contextPath}/bbs/add.do" method="post" >
	 
	  <div class="mb-3">
	    <form:label path="bbsTitle" class="form-label">제목</form:label>
	    <form:input path="bbsTitle" class="form-control" cssErrorClass="form-control is-invalid" />
	    <form:errors path="bbsTitle" cssClass="invalid-feedback"/>
	  </div>
	  <div class="mb-3">
	    <form:label path="bbsContent" class="form-label">내용</form:label>
	    <form:textarea path="bbsContent" row="5" class="form-control"  cssErrorClass="form-control is-invalid" />
	    <form:errors path="bbsContent" cssClass="invalid-feedback" />
	  </div>
	  <button type="submit" id="saveBtn" class="btn btn-primary"><i class="bi-file-arrow-up"></i> 저장</button>
		<a href="${pageContext.request.contextPath}/bbs/list.do">
			<button type="button" class="btn btn-primary" ><i class="bi-list"></i> 게시글목록</button>
		</a>
	</form:form>
	</div>
</div>

 

 

 

edit.jsp를 작성한다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

<script type="text/javascript">
	$(function() { //문서 로드가 완료된 후 실행
		$('#delLink').on('click', function(e){ //id=delLink 인 엘리먼트 클릭시 실행
			var ok = confirm('진짜 삭제?');
			if (ok===false) {
				e.preventDefault(); //이벤트에 대한 브라우저 기본동작 취소
// 				return false; //이벤트리스너함수에서 false를 반환하면 
							  //이벤트에 대한 브라우저 기본동작 취소 
			}
		});
	});

</script>


<div class="row">
    <div class="col">
	<h1>게시글 변경</h1>
	<form:form modelAttribute="bbsVo" action="${pageContext.request.contextPath}/bbs/edit.do" method="post" >
	  <div class="mb-3">
	    <form:label path="bbsNo" class="form-label">글번호</form:label>
	    <form:input path="bbsNo" readonly="true" class="form-control" />
	  </div>
	  
	   <div class="mb-3">
	    <form:label path="bbsTitle" class="form-label">제목</form:label>
	    <form:input path="bbsTitle" class="form-control" cssErrorClass="form-control is-invalid" />
	    <form:errors path="bbsTitle" cssClass="invalid-feedback"/>
	  </div>
	  
	  <div class="mb-3">
	    <form:label path="bbsContent" class="form-label">내용</form:label>
	    <form:textarea path="bbsContent" row="5" class="form-control"  cssErrorClass="form-control is-invalid" />
	    <form:errors path="bbsContent" cssClass="invalid-feedback" />
	  </div>
	  
	  <button type="submit" class="btn btn-primary"><i class="bi-file-arrow-up"></i> 저장</button>
		<a href="${pageContext.request.contextPath}/bbs/list.do">
			<button type="button" class="btn btn-primary" ><i class="bi-list"></i> 목록</button>
		</a>
		<a id="delLink" href="${pageContext.request.contextPath}/bbs/del.do?bbsNo=${bbsVo.bbsNo}">
			<button type="button" class="btn btn-primary" ><i class="bi-list"></i> 삭제</button>
		</a>
	</form:form>
	</div>
</div>

 

'Coding > spring' 카테고리의 다른 글

로그인 화면 구성  (0) 2022.10.07
부트스트랩 이용해서 에러메세지 띄워보기  (1) 2022.09.23
회원정보 수정  (0) 2022.09.16
Jquery를 활용한 예제  (0) 2022.08.26
인강 복습 : [회원관리] 유효성 처리 검사  (0) 2022.08.24