본문 바로가기
SPRING

[SPRING] 09/08

by KhyeonS 2022. 9. 8.

spring 방명록 만들기 

 

방명록
--시퀀스
create sequence seq_visit_idx;

--테이블
create table VISIT(
idx NUMBER(3) primary key,
name VARCHAR2(50),
content CLOB,
pwd VARCHAR2(50) not null,
regidate DATE
);

--샘플데이터
insert into VISIT values(
seq_visit_idx.nextVal,
'일길동',
'내가 1등',
'1111',
sysdate
);
insert into VISIT values(
seq_visit_idx.nextVal,
'이길동',
'내가 2등',
'1111',
sysdate
);

 

pom.xml 수정

mybatis-config.xml 수정

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "HTTP://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
	<settings>
		<setting name="cacheEnabled" value="false" />
		<setting name="useGeneratedKeys" value="true" />
		<setting name="defaultExecutorType" value="REUSE" />
	</settings>
	
	<typeAliases>
	<!-- 별칭 만들기  -->
		 <typeAlias type="vo.VisitVo" alias="visit"/>
	<!-- 	 <typeAlias type="vo.DeptVo" alias="dept"/>--> 
	</typeAliases>
	
	<mappers>
		<mapper resource="config/mybatis/mapper/visit.xml" />
	</mappers>
</configuration>

기본설정 들을 다해준다.

vo패키지 VisitVO 클래스 생성

package vo;

public class VisitVO {
	private int idx;
	private String name, content, pwd, regdate;
	public int getIdx() {
		return idx;
	}
	public void setIdx(int idx) {
		this.idx = idx;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public String getRegdate() {
		return regdate;
	}
	public void setRegdate(String regdate) {
		this.regdate = regdate;
	}
}

dao 생성

VisitDAO 생성

package dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import vo.VisitVO;

public class VisitDAO {
	SqlSession sqlSession;
	
	public void setSqlSession(SqlSession sqlSession) {
		this.sqlSession = sqlSession;
	}
	
	//방명록 전체 조회 
	public List<VisitVO> selectList(){
		List<VisitVO> list=sqlSession.selectList("v.visit_list");
		return list;
	}
}

 

 

context-3-dao.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:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
	<!-- VisitDAO  visit_daoBean = new ...-->
	<bean id="visit_daoBean" class="dao.VisitDAO">
		<property name="sqlSession" ref="sqlSessionBean"/>
	</bean>		
</beans>

 

package com.korea.vs;

import java.util.List;

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

import dao.VisitDAO;
import vo.VisitVO;

@Controller
public class VisitController {
	VisitDAO visit_Dao;
	public void setVisit_Dao(VisitDAO visit_Dao) {
		this.visit_Dao = visit_Dao;
	}
	
	@RequestMapping(value = {"/","/list.do"})
	public String list(Model model) {
		//방명록 조회를 위한 dao의 메서드 호출
		List<VisitVO> list =visit_Dao.selectList();
		model.addAttribute("list",list);
		return "/WEB_INF/views/visit/visit_list.jsp";
	}
}

visit_list.jsp 생성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    방명록 테스트
</body>
</html>


visit_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"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
* {
	magin: 0;
	padding: 0
}

#main_box {
	width: 330px;
	margin: 0 auto;
}

h1 {
	text-align: center;
	font-size: 20px;
	margin: 10px 0 10px 0;
	color: #ffffff;
	text-shadow: 2px 2px 2px black;
}

.visit_box {
	margin: 0 auto;
	width: 330px;
	margin-top: 30px;
	box-shadow: 2px 2px 2px black;
	border: 1px solid gray;
}

.type_content {
	min-height: 100px;
	height: auto;
	background: #fcc;
}

.type_name {
	background: #cfc;
}

.type_regdate {
	background: #ccf;
}
</style>
<!-- Ajax사용을 위한 httprequest참조 -->
<script src="/vs/resources/js/httpRequest.js"></script>
<script>

	/* 삭제 버튼 클릭*/
	function del(f) {
		var pwd = f.pwd.value; //원본 비밀번호
		var c_pwd = f.c_pwd.value;//비교를 위한 번호

		if (pwd != c_pwd) {
			alert('비밀번호가 다릅니다');
			return;
		}
		//Ajax를 통해 idx를 서버로 전송
		var url = "delete.do";
		var param = "idx="+f.idx.value;
		sendRequest(url, param, resultFunc, "Post");
		


	}//del()
	
	/*삭제 결과를 확인랑 콜백 메서드*/
	function resultFunc(){
		if(xhr.readyState == 4 && xhr.status==200){
			//컨트롤러에서 삭제후 return해준 데이터를 받는다
			var data= xhr.responseText;
			
			if(data =='no'){
				alert("삭제실패");
				return;
			}else{
				alert("삭제성공");
				location.href="list.do";
			}
		}
	}

	/* 수정 버튼 클릭*/
	function modify(f) {
		var pwd = f.pwd.value; //원본 비밀번호
		var c_pwd = f.c_pwd.value;//비교를 위한 번호

		if (pwd != c_pwd) {
			alert('비밀번호가 다릅니다');
			return;
		}

	}
</script>
</head>
<body>
	<div id="main_box">
		<h1>:::방명록 리스트:::</h1>
		<div align="center">
			<input type="button" value="글쓰기"
				onclick="location.href='insert_form.do'">
		</div>

		<c:forEach var="vo" items="${list}">
			<div class="visit_box">
				<div class="type_content">${vo.content}</div>
				<div class="type_name">${vo.name}</div>
				<div class="type_regdate">작성일:${vo.regdate}</div>

				<div>
					<form>
						<input type="hidden" name="idx" value="${vo.idx}"> <input
							type="hidden" name="pwd" value="${vo.pwd}"> 비밀번호<input
							type="password" name="c_pwd"> <input type="button"
							value="수정" onclick="modify(this.form);"> <input
							type="button" value="삭제" onclick="del(this.form);">

					</form>
				</div>
			</div>
		</c:forEach>
	</div>
</body>
</html>

주의!!!

참조 파일은 부조건 resources에 담아야한다!!!!!!!
삭제나 수정은 이파일을 이용해서 필요하다.

VisitCotroller 수정

package com.korea.vs;

import java.util.List;

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

import dao.VisitDAO;
import vo.VisitVO;

@Controller
public class VisitController {
	VisitDAO visit_dao;

	public void setVisit_dao(VisitDAO visit_dao) {
		this.visit_dao = visit_dao;
	}

	@RequestMapping(value = {"/", "/list.do"})
	public String list(Model model) {
		//방명록 조회를 위한 dao의 메서드 호출
		List<VisitVO> list =visit_dao.selectList();
		model.addAttribute("list",list);
		return "/WEB-INF/views/visit/visit_list.jsp";
	}
	
	//삭제 메써드
	@RequestMapping("/delete.do")
	@ResponseBody //return값을 jsp등으로 인식하지 않고, 콜백 메서드로 전달하기 위한 키워드
	public String delete(int idx) {
		int res = visit_dao.delete(idx);

		String result = "no";
		if (res==1) {
			result="yes";
		}
		//@REsponseBody가 적용되어 있으므로
		//result에 no 또는 yes데이터는 콜백 메서드로 돌아간다
		return result;
	}

}

VisitDAO수정

package dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import vo.VisitVO;

public class VisitDAO {
	SqlSession sqlSession;
	
	public void setSqlSession(SqlSession sqlSession) {
		this.sqlSession = sqlSession;
	}
	
	//방명록 전체 조회 
	public List<VisitVO> selectList(){
		List<VisitVO> list=sqlSession.selectList("v.visit_list");
		return list;
	}
	
	//게시글 삭제
	public int delete(int idx) {
		int res =sqlSession.delete("v.visit_delete", idx);
		return res;
	}
}

visit.xml 수정

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
	<mapper namespace="v">
	
		<!-- 방명록 전체 조회 -->
		<select id="visit_list" resultType="visit">
			select * from visit order by
			idx DESC
	
		</select>
		
		<!-- 게시글 삭제 -->
		<delete id="visit_delete" parameterType="int">
			delete from visit where idx =#{idx}
		</delete>
	</mapper>

삭제 기능이 추가 되었다.

2022_0908_Visit.zip
0.04MB

'SPRING' 카테고리의 다른 글

[SPRING] 09/14 방명록에 사진 첨부  (0) 2022.09.14
[SPRING] 09/13 글쓰기 기능, 수정 추가  (0) 2022.09.13
[SPRING] 09/07  (0) 2022.09.07
[SPRING]09/06  (0) 2022.09.06
[Spring]09/02  (1) 2022.09.02

댓글