Notice
Recent Posts
Recent Comments
ยซ   2024/09   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
In Total
๊ด€๋ฆฌ ๋ฉ”๋‰ด

A Joyful AI Research Journey๐ŸŒณ๐Ÿ˜Š

[64] 230330 Spring: ํšŒ์› ์ •๋ณด ์ˆ˜์ •, ์‚ญ์ œ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ. *id๊ฐ’ ๋„˜๊ธฐ๊ธฐ [K-๋””์ง€ํ„ธ ํŠธ๋ ˆ์ด๋‹ 64์ผ] ๋ณธ๋ฌธ

๐ŸŒณBootcamp Revision 2023โœจ/Spring Framework, Java

[64] 230330 Spring: ํšŒ์› ์ •๋ณด ์ˆ˜์ •, ์‚ญ์ œ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ. *id๊ฐ’ ๋„˜๊ธฐ๊ธฐ [K-๋””์ง€ํ„ธ ํŠธ๋ ˆ์ด๋‹ 64์ผ]

yjyuwisely 2023. 3. 30. 12:50

230329 Thu 64th class

Ch. 18 MVC ํŒจํ„ด ๊ตฌํ˜„
์ง„๋„: Ch. 18 MVC ํŒจํ„ด ๊ตฌํ˜„์— ๊ธฐ๋ฐ˜ํ•œ ์ž์ฒด ์ˆ˜์—… (๊ต์žฌ: ์ตœ๋ฒ”๊ท ์˜ JSP 2.3 ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ: ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ค‘๊ธ‰๊นŒ์ง€, ์ €์ž: ์ตœ๋ฒ”๊ท )
์ฑ… ์˜ˆ์ œ ์ฝ”๋“œ: https://github.com/madvirus/jsp23
์ €์ž ๋ธ”๋กœ๊ทธ: https://javacan.tistory.com/

 

์ตœ๋ฒ”๊ท ์˜ JSP 2.3 ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ: ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ค‘๊ธ‰๊นŒ์ง€ | ์ตœ๋ฒ”๊ท  - ๊ต๋ณด๋ฌธ๊ณ 

์ตœ๋ฒ”๊ท ์˜ JSP 2.3 ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ: ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ค‘๊ธ‰๊นŒ์ง€ | [์ตœ๋ฒ”๊ท ์˜ JSP 2.3 ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ค‘๊ธ‰๊นŒ์ง€]๋Š” JSP 2.3์˜ ์ƒˆ๋กœ์šด ํŠน์ง• ๋ฐ˜์˜๊ณผ JSP๋ฅผ ์ง€์›ํ•˜๋Š” ์š”์†Œ์ธ ์„œ๋ธ”๋ฆฟ๊ณผ ํ‘œํ˜„ ์–ธ์–ด ๋“ฑ์˜ ์ƒˆ๋กœ์šด

product.kyobobook.co.kr


์˜ค๋Š˜ ๋ฐฐ์šด ๊ฒƒ ์ค‘ ๊ธฐ์–ตํ•  ๊ฒƒ์„ ์ •๋ฆฌํ–ˆ๋‹ค.


๋‹ค์‹œ ๊ธฐ์–ตํ•  ๊ฒƒ

input ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ํƒ€์ดํ•‘ํ•˜๋Š” ํ˜•ํƒœ๊ฐ€ ์•„๋‹Œ, ๋‹จ์ˆœํ•˜๊ฒŒ ๋ณด์ด๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
๋’ค์— readonly๋ฅผ ๋ถ™์ด๊ฑฐ๋‚˜, 
ํ‘œํ˜„์‹์„ ๋‘๊ณ  input ํƒœ๊ทธ์— type์„ hidden์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.

๋ฒˆํ˜ธ: <input type="text" name="no" value="<%=rs.getString("no") %>" readonly> <!-- ์ฒซ๋ฒˆ์งธ ๋ฐฉ๋ฒ• -->
๋ฒˆํ˜ธ: <%=rs.getInt("no") %> <input type="hidden" name="no" value="<%=rs.getString("no") %>"> <!-- ๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•: hidden ์“ด๋‹ค. -->

2023.03.24 - [๐ŸŒณK-Digital Revision 2023โœจ/JSP] - [60] 230324 JSP: ์นดํŽ˜ ๊ธ€์“ฐ๊ธฐ ์‘์šฉ [K-๋””์ง€ํ„ธ ํŠธ๋ ˆ์ด๋‹ 60์ผ]

์ด ๊ธ€์˜ ์ œ์ผ ๋งˆ์ง€๋ง‰์— ์žˆ๋Š” ๋‚ด์šฉ์ธ๋ฐ, ์œ„์˜ ๋‚ด์šฉ์„ ์‘์šฉํ•œ ๊ฒƒ์ด๋‹ค.

input type="hidden"์œผ๋กœ input ํ˜•ํƒœ๋Š” ์ˆจ๊ธด๋‹ค. ๊ฒŒ์‹œํŒ ๋ชฉ๋ก์˜ ์ž‘์„ฑ์ผ๊ณผ ์‹œ๊ฐ„์€ MySQL์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค. 

<%=session.getAttribute("user_id")%>
<input type="hidden" name="id" value="<%=session.getAttribute("user_id")%>">

2023.03.24 - [๐ŸŒณK-Digital Revision 2023โœจ/JSP] - [60] 230324 JSP: ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ ์‘์šฉ [K-๋””์ง€ํ„ธ ํŠธ๋ ˆ์ด๋‹ 60์ผ]




์ •์˜ ๋ฐ ํŠน์ง•
<input> ํƒœ๊ทธ์˜ formaction ์†์„ฑ์€ ํผ ๋ฐ์ดํ„ฐ(form data)๊ฐ€ ์„œ๋ฒ„๋กœ ์ œ์ถœ๋  ๋•Œ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ํŒŒ์ผ์˜ URL์„ ๋ช…์‹œํ•œ๋‹ค.
 
์ด ์†์„ฑ์€ <input> ์š”์†Œ์˜ type ์†์„ฑ๊ฐ’์ด “submit” ๋˜๋Š” “image”์ธ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
formaction ์†์„ฑ์€ <form> ์š”์†Œ์˜ action ์†์„ฑ๊ฐ’์„ ์žฌ์ •์˜(overriding)ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ๋ฒ•

<input type="submit|image" formaction="URL">

 

์ฐธ๊ณ : http://www.tcpschool.com/html-tag-attrs/input-formaction

<form method="post>
<table>
<!-- (์ค‘๋žต) -->
</table>
		<input type="submit" value="์ˆ˜์ •" formaction="modifyBoard.jsp">
		<input type="submit" value="์‚ญ์ œ" formaction="removeBoard.jsp">
</form>

2023.03.24 - [๐ŸŒณK-Digital Revision 2023โœจ/JSP] - [60] 230324 JSP: ์นดํŽ˜ ๊ธ€์“ฐ๊ธฐ ๊ธฐ๋Šฅ, ๊ฒŒ์‹œํŒ ๋ชฉ๋ก ๊ตฌํ˜„ํ•˜๊ธฐ [K-๋””์ง€ํ„ธ ํŠธ๋ ˆ์ด๋‹ 60์ผ]


loginVO ์ฐธ๊ณ 


ํšŒ์› ์ •๋ณด ์ˆ˜์ •, ์‚ญ์ œ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ

์šฐ์„  SQL๋กœ ์ƒ๊ฐํ•ด ๋ณด๊ธฐ 
id๊ฐ€ abcd์ธ ํšŒ์› ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.

update member
set name = 'a',
	password = '1',
    phone = '010'
where id = 'abcd'
;

id ๊ฐ’์„ ๋„˜๊ธฐ๊ธฐ

๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•
1. form ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•œ๋‹ค.

<form action="listDetail">
	์•„์ด๋””<input type="text" name="id>
</form>


2. a ํƒœ๊ทธ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.

<a href="listDetail?id=ํŠน์ •์•„์ด๋””๊ฐ’">์•„์ด๋””</a>

listDetail.jsp๋กœ ๊ฐ€๊ธฐ ์ „์— select๋กœ ์•„์ด๋”” ๊ฐ’์„ ๊ฐ€์ ธ๊ฐ„๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” form ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•œ๋‹ค. get๋ฐฉ์‹์„ ์“ฐ๋ฉด ๋…ธ์ถœ๋œ๋‹ค. 


list.jsp
์ˆ˜์ •๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ์•„๋ž˜ URL์ด ๋‚˜์˜ค๋„๋ก ๋งŒ๋“ ๋‹ค.
http://localhost:8081/listDetail?id=aaa


์ฝ”๋“œ 1) 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>ํšŒ์› ๊ด€๋ฆฌ ํŽ˜์ด์ง€</title>
</head>
<body>
<!--  ${memlist} -->
	<table border="1">
	<tr>
		<td>ID</td><td>๋น„๋ฐ€๋ฒˆํ˜ธ</td><td>์ฃผ์†Œ</td><td>ํฐ๋ฒˆํ˜ธ</td><td>์ด๋ฉ”์ผ</td><td>์ด๋ฆ„</td><td>์ƒ์ผ</td>
	</tr> <!-- c:forEach var="๋ณ€์ˆ˜" items="์•„์ดํ…œ" -->
	<c:forEach var="list" items="${memlist}"> <!-- ๋ฐ˜๋ณตํ•œ๋‹ค. -->
		<tr>
		<td><a href="listDetail?id=${list.id}">${list.id}</a></td> 
		<!-- ๋‚ด๊ฐ€ ํ‹€๋ฆฐ ๋ถ€๋ถ„: <a href="listDetail"> ์—์„œ ?id=${list.id} ์ถ”๊ฐ€ํ•˜๋ฉด id๊ฐ’์ด listDetail.jsp๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค. -->
		<td>${list.password}</td>
		<td>${list.addr}</td>
		<td>${list.phone}</td>
		<td>${list.email}</td>
		<td>${list.name}</td>
		<td>${list.age}</td>
	</tr>
	</c:forEach>
	</table>
</body>
</html>



์ฝ”๋“œ 1.1) listDetail.jsp

์˜ค๋ฅ˜๊ฐ€ ๋‚œ ์ด์œ ๋Š”
</input type="submit" value="์ˆ˜์ •" formaction="modify">
</input type="submit" value="์‚ญ์ œ" formaction="remove">
์„ ์“ฐ๊ธฐ ์ „์— <form method="post"> (์ค‘๋žต) </form>์„ ์จ์•ผ ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  input ํƒœ๊ทธ ์•ˆ์˜ name์„ ์“ธ ๋•Œ LoginVO.java์˜ ๋ณ€์ˆ˜๋ช…์„ ์ž˜ ์ฒดํฌํ•ด์„œ ์˜คํƒ€๊ฐ€ ์—†๊ฒŒ ํ•œ๋‹ค.

public class LoginVO {

	
	private String id;
	private String password;
	private String addr;
	private String phone;
	private String email;
	private String name;
	private int age;
	public String getId() {
		return id;
	}
    
    (์ค‘๋žต)
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>๊ฐœ์ธ ํšŒ์› ๊ด€๋ฆฌ ์ƒ์„ธ ํŽ˜์ด์ง€</title>
</head>
<body>

<!-- DB ์ž‘์—…์„ ํ•ด์•ผํ•œ๋‹ค. ์„œ๋น„์Šค์™€ Mapper์— ๋ณด๋‚ด์ค€๋‹ค. -->

<%-- ${listDetail} --%>

<%-- <a href="listDetail?id=${list.id}">์•„์ด๋””</a> --%>

<form method="post">

	<table border="1">
	<tr> <!-- name์„ LoginVO์™€ ๋งž์ถฐ์ค˜์•ผ DB๋กœ ๋ณด๋‚ด์ง„๋‹ค. -->
		<td>ID</td><!-- id๋„ DB์— ๋ณด๋‚ด๋ ค๋ฉด inputํƒœ๊ทธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. -->
<%-- 	<input type="text" value="${listDetail.id}" name="id" readonly> ์ด ๋ฐฉ์‹๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. --%>
		<td>${listDetail.id} <input type="hidden" name="id" value="${listDetail.id}"></td>	
		
	</tr>
	<tr><!-- ํšŒ์› ์ •๋ณด ์ˆ˜์ • ๊ฐ€๋Šฅ -->	
		<td>๋น„๋ฐ€๋ฒˆํ˜ธ</td>
		<td><input type="password" value="${listDetail.password}" name="password"></td>
	</tr>
	<tr>	
		<td>์ฃผ์†Œ</td><%-- <td><input type="text" value="${listDetail.addr}" name="addr"></td> --%>
		<td>${listDetail.addr}</td>
	</tr>
	<tr><!-- ํšŒ์› ์ •๋ณด ์ˆ˜์ • ๊ฐ€๋Šฅ -->	
		<td>ํฐ๋ฒˆํ˜ธ</td>
		<td><input type="text" value="${listDetail.phone}" name="phone"></td>
	</tr>
	<tr>
		<td>์ด๋ฉ”์ผ</td><%-- <td><input type="text" value="${listDetail.email}" name="email"></td> --%>
		<td>${listDetail.email}</td>
	</tr>	
	<tr><!-- ํšŒ์› ์ •๋ณด ์ˆ˜์ • ๊ฐ€๋Šฅ -->	
		<td>์ด๋ฆ„</td>
		<td><input type="text" value="${listDetail.name}" name="name"></td>
	</tr>
	<tr>
		<td>์ƒ์ผ</td>
		<td>${listDetail.age}</td>
	</tr>

	<tr>
	<td colspan="2">
	<input type="submit" value="์ˆ˜์ •" formaction="modify"> 
	<input type="submit" value="์‚ญ์ œ" formaction="remove"></td></tr>
	</table>
</form>
</body>
</html>


์ฝ”๋“œ 2) MemberController.java

package org.hj.controller;

import javax.servlet.http.HttpSession;

import org.hj.model.LoginVO; //๋ชจ๋ธ(LoginVO)์ด ์žˆ์Œ์„ ์•Œ๋ ค์ค€๋‹ค.
import org.hj.service.LoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;


@Controller

public class MemberController { //MVC์ค‘ ์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• ์„ ํ•œ๋‹ค.

	@Autowired
	LoginService ls; //LoginService ls = new LoginService(); ํด๋ž˜์Šค๋ฅผ new๋ฅผ ์จ์„œ ๊ฐ์ฒดํ™”ํ•œ ๊ฒƒ. 
	//LoginService๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋ฏ€๋กœ ์›๋ž˜ new๋Š” ์•ˆ ๋˜๋Š” ๋ฐ ์œ„์— @AutoWired ์ด์šฉํ•ด์„œ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ–ˆ๋‹ค.
	
	//1) ํšŒ์›๊ฐ€์ž… //ํ™”๋ฉด ์‹คํ–‰์„ ์œ„ํ•œ ๋ฉค๋ฒ„ (GET๋ฐฉ์‹)
	@RequestMapping(value = "/member", method = RequestMethod.GET) //member ๋ฉ”์„œ๋“œ GET ๋ฐฉ์‹
	public String member () {
		return "member/memberin"; //๋ฉค๋ฒ„ ํด๋”์˜ memberin.jsp๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
	}
	
	//1.1) ํšŒ์›๊ฐ€์ž…์„œ๋ฒ„ //์‹ค์ œ๋กœ ๊ฐ€์ž…ํ•˜๊ธฐ ์œ„ํ•œ ๋ฉค๋ฒ„ (POST๋ฐฉ์‹)
	@RequestMapping(value = "/member", method = RequestMethod.POST) //๋‘˜ ๋‹ค GET์ด๋ฉด ์ถฉ๋Œ์ด ์ผ์–ด๋‚œ๋‹ค. ๋ฉ”์„œ๋“œ ๋ฐฉ์‹์ด POST์ด๋‹ค.
	//							int		a //member๋Š” ์ฐธ์กฐ ๋ณ€์ˆ˜
	//public String memberPost(String id, String password, String name) //๋ฉ”๋ชจ๋ฆฌ ์ฐจ์ง€๊ฐ€ ํฌ๋ฏ€๋กœ ์“ฐ์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. private ๊ฐ™์€ ์ ‘๊ทผ ์ œํ•œ์ž๋„ ์—†๋‹ค.
	public String memberPost (LoginVO member) { // ๋ชจ๋ธ: LoginVO
		System.out.println(member); //member.toString()์ด ์ƒ๋žต๋œ ๊ฒƒ์ด๋‹ค.
		//#####์ƒˆ๋กœ ์ถ”๊ฐ€ํ•จ#####
		ls.memreg(member);
		return "board/list"; //board ํด๋”์˜ list.jsp๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ๊ฒŒ์‹œํŒ ๋ชฉ๋ก์„ ๋ณด์—ฌ์ค€๋‹ค.
	}
	
	
	//2) ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€
	@RequestMapping(value = "/login", method = RequestMethod.GET)
	public String login () {
		System.out.println("aaaa");
		return "member/login";
	}
	
	//2.1) ๋กœ๊ทธ์ธ ์„œ๋ฒ„
	@RequestMapping(value = "/login", method = RequestMethod.POST)
	public String loginPost (HttpSession session, LoginVO member) { //member: login.jsp์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
		// HttpSession session = new HttpSession; ์œ„ ()์•ˆ์˜ HttpSession session์„ ์ง€์šฐ๊ณ  ๋Œ€์‹  ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.
/*		System.out.println("contorller="+member);
		System.out.println(ls.login(member));*/
		
		session.setAttribute("login", ls.login(member)); //์œ„ member์˜ ์•„์ด๋””, ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ ธ๊ฐ„๋‹ค.
		
		if (ls.login(member)==null) {
			return "member/login";
			} else {
				session.setAttribute("login", ls.login(member)); //null์ด ์•„๋‹ˆ๋ฉด ์„ธ์…˜์— ์ €์žฅํ•œ๋‹ค.
				return "redirect:/list"; 
				//์œ„๋Š” ์ฃผ์†Œ ์ •์˜ํ•ด์ค€ ๊ฒŒ ์—†์–ด์„œ ์ฒ˜์Œ์— ์—๋Ÿฌ๋‚จ (board์˜ list.jsp๋กœ ๊ฐ€๋Š” ๊ฒŒ ์•„๋‹Œ ๋“ฏ -> member ํด๋”์˜ list.jsp ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค.)
				//return "/board/list"; //๊ฒŒ์‹œํŒ ๋ฆฌ์ŠคํŠธ ๋ณด๊ธฐ ์œ„ํ•ด ๋‚ด๊ฐ€ ์•„๋ž˜ ์ฝ”๋“œ๋กœ ๋ฐ”๊ฟˆ. 
			}
		}
	
	//3) ํšŒ์› ๊ด€๋ฆฌ ํŽ˜์ด์ง€ (๊ด€๋ฆฌ์ž ์ „์šฉ)
	@RequestMapping(value = "/list", method = RequestMethod.GET) //value:์š”์ฒญ๋ฐ›์„ url์„ ์„ค์ •ํ•˜๊ฒŒ ๋œ๋‹ค.
	public String mergerlist(Model model) { //์ฒ˜์Œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์žˆ๋Š” ์ด์œ : ๋ฆฌํ„ด์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.
		//model.addAttribute(String name, Object value);
		//: value ๊ฐ์ฒด๋ฅผ name ์ด๋ฆ„์œผ๋กœ ์ถ”๊ฐ€ํ•จ. ๋ทฐ ์ฝ”๋“œ์—์„œ๋Š” name์œผ๋กœ ์ง€์ •ํ•œ ์ด๋ฆ„์„ ํ†ตํ•ด์„œ value๋ฅผ ์‚ฌ์šฉํ•จ.
		model.addAttribute("memlist", ls.memlist()); //ls.memlist()->memlist:๋ฐ์ดํ„ฐ ์ €์žฅํ•ด์„œ ๋„˜๊ธด๋‹ค.
		return "member/list"; //memberํด๋”์˜ list.jsp ๋งŒ๋“ค์–ด์ค€๋‹ค. /WEB-INF/views/member/list.jsp
	}
	
	//4) ํšŒ์› ์ƒ์„ธ ์ •๋ณด ์กฐํšŒ ํŽ˜์ด์ง€  (๊ด€๋ฆฌ์ž ์ „์šฉ)
	@RequestMapping(value = "/listDetail", method = RequestMethod.GET) //list.jsp์˜ <a>ํƒœ๊ทธ์˜ ?์— ๋Œ๊ณ ๊ฐ€๋Š” ๊ฒŒ ์žˆ์œผ๋ฉด ๊ฐ™์ด ๊ฐ€๊ฒŒ ๋œ๋‹ค.
	//public String memberDetail(String id) {//๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๋‘”๋‹ค. 
	public String memberDetail(LoginVO login, Model model) {
		// ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ (LoginVO login)๋กœ๋„ ํ•ด๋„ ๋œ๋‹ค (private String id๊ฐ€ ์ •์˜๋˜์–ด์žˆ์œผ๋ฏ€๋กœ) //์ฒ˜์Œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€: ๋ฆฌํ„ด์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.
		//ls.memlistDetail(id);//[#๋ฉ”์„œ๋“œ ํ˜ธ์ถœ#]
		model.addAttribute("listDetail", ls.memlistDetail(login));
		return "member/listDetail"; // /WEB-INF/views/member/listDetail.jsp
	}
	
	//5) ํšŒ์› ์ •๋ณด ์ˆ˜์ •
	@RequestMapping(value = "/modify", method = RequestMethod.POST)//๋…ธ์ถœ ์•ˆ ๋˜๊ฒŒ POST๋ฐฉ์‹์„ ์“ด๋‹ค. 
	public String memberModify(LoginVO login, RedirectAttributes rttr) { //rttr:๋ณ€์ˆ˜๋ช…
		//(String name, String id, String password, String phone)์œผ๋กœ๋„ ๊ฐ€๋Šฅํ•˜๊ธด ํ•˜๋‹ค. ํšจ์œจ์ ์ด์ง€ ์•Š์œผ๋ฏ€๋กœ ์ถ”์ฒœ๋˜์ง„ ์•Š๋Š”๋‹ค.
		ls.memberModify(login);
		rttr.addAttribute("id", login.getId());//id๊ฐ’์ด ๋„˜์–ด๊ฐ„๋‹ค.
		return "redirect:/listDetail";//์ˆ˜์ • ํ›„ ํšŒ์› ์ƒ์„ธ ์ •๋ณด ์กฐํšŒ ํŽ˜์ด์ง€๋กœ ๊ฐ„๋‹ค.
	}
	
	//6) ํšŒ์› ์ •๋ณด ์‚ญ์ œ
	@RequestMapping(value = "/remove", method = RequestMethod.POST)//๋…ธ์ถœ ์•ˆ ๋˜๊ฒŒ POST๋ฐฉ์‹์„ ์“ด๋‹ค. 
	public String memberRemove(LoginVO login) { 
		ls.memberRemove(login);
		return "redirect:/list";//์‚ญ์ œ ํ›„ ํšŒ์› ๊ด€๋ฆฌ ํŽ˜์ด์ง€๋กœ ๊ฐ„๋‹ค.
	}
}



์ฝ”๋“œ 3) LoginService.java

package org.hj.service; //LoginService๋Š” ํŒจํ‚ค์ง€ ์•ˆ์— ์žˆ๋‹ค. 

import java.util.ArrayList;

import org.hj.model.LoginVO;
//์ธํ„ฐํŽ˜์ด์Šค(๋„๋ฉด): ์„ค๊ณ„ํ•œ๋‹ค. ๋งค๊ฐœ ๋ณ€์ˆ˜ ๋“ฑ ํŒŒ์•…ํ•ด์„œ ๋ฏธ๋ฆฌ ์„ค๊ณ„ํ•ด๋‘” ๊ณณ์ด๋‹ค.
public interface LoginService { //์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ new()๋ฅผ ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ MemberController.java์— @Autowired๋ฅผ ์„ค์ •
	//#####์ƒˆ๋กœ ์ถ”๊ฐ€ํ•จ#####
	//1) ํšŒ์›๊ฐ€์ž…
	public void memreg(LoginVO member); //์ถ”์ƒ๋ฉ”์„œ๋“œ์ด๋ฏ€๋กœ LoginServiceImpl.java์—์„œ ๊ตฌํ˜„ํ•œ๋‹ค.
	//2) ๋กœ๊ทธ์ธ
	public LoginVO login(LoginVO member);
	//3) ํšŒ์› ๋ฆฌ์ŠคํŠธ
	public ArrayList<LoginVO> memlist(); //๋น„์›Œ๋‘”๋‹ค.
	//4) ํšŒ์› ์ƒ์„ธ ์ •๋ณด ์กฐํšŒ ํŽ˜์ด์ง€ (๊ด€๋ฆฌ์ž ์ „์šฉ)
	//public LoginVO memlistDetail(String id);//[#๋ฉ”์„œ๋“œ ์„ ์–ธ#] //๋ฆฌํ„ด ํƒ€์ž…์„ ๋ชจ๋ฅด๊ฒ ์œผ๋ฉด ์šฐ์„  void๋กœ ๋‘”๋‹ค.
	public LoginVO memlistDetail(LoginVO login);
	//5) ํšŒ์› ์ •๋ณด ์ˆ˜์ • 
	public void memberModify(LoginVO login);
	//6) ํšŒ์› ์ •๋ณด ์‚ญ์ œ
	public void memberRemove(LoginVO login);
}



์ฝ”๋“œ 4) LoginServiceImpl.java

package org.hj.service; //ํŒŒ์ผ์˜ ์œ„์น˜๋Š” ํŒจํ‚ค์ง€๋ฅผ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋‹ค.

import java.util.ArrayList;

import org.hj.mapper.LoginMapper;
import org.hj.model.LoginVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
//๊ตฌํ˜„ํ•œ๋‹ค.
@Service
public class LoginServiceImpl implements LoginService { //LoginService๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
	
	@Autowired
	LoginMapper lm; //LoginMapper lm = new LoginMapper();
	
	//#####์ƒˆ๋กœ ์ถ”๊ฐ€ํ•จ#####
	//1) ํšŒ์›๊ฐ€์ž…
	public void memreg(LoginVO member) { //์ถ”์ƒ๋ฉ”์„œ๋“œ LoginSerive.java๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
		lm.memreg(member);
	};
	//2) ๋กœ๊ทธ์ธ
	public LoginVO login (LoginVO member) {
		System.out.println("service="+member);
		System.out.println("service return="+lm.login(member));
		return lm.login(member);
	}
	//๋น„์ฆˆ๋‹ˆ์Šค๊นŒ์ง€ ๋๋‚ฌ๋‹ค. ์„œ๋น„์Šค -> DB ์—ฐ๊ฒฐํ•ด์•ผํ•œ๋‹ค.	
	//3) ํšŒ์› ๋ฆฌ์ŠคํŠธ
	public ArrayList<LoginVO> memlist() {
		return lm.memlist();
	}
	
	//4) ํšŒ์› ์ƒ์„ธ ์ •๋ณด ์กฐํšŒ ํŽ˜์ด์ง€ (๊ด€๋ฆฌ์ž ์ „์šฉ)
	//public LoginVO memlistDetail(String id) {
	public LoginVO memlistDetail(LoginVO login) {
		return lm.memlistDetail(login);//[#๋ฉ”์„œ๋“œ ํ˜ธ์ถœ#]
	}
	
	//5) ํšŒ์› ์ •๋ณด ์ˆ˜์ •
	public void memberModify(LoginVO login) {
		lm.memberModify(login);//[#๋ฉ”์„œ๋“œ ํ˜ธ์ถœ#]
	}
	
	//6) ํšŒ์› ์ •๋ณด ์‚ญ์ œ
	public void memberRemove(LoginVO login) {
		lm.memberRemove(login);//[#๋ฉ”์„œ๋“œ ํ˜ธ์ถœ#]
	}
}



์ฝ”๋“œ 5) LoginMapper.java

package org.hj.mapper;

import java.util.ArrayList;

import org.hj.model.LoginVO;

public interface LoginMapper {
	//#####์ƒˆ๋กœ ์ถ”๊ฐ€ํ•จ#####
	//1) ํšŒ์›๊ฐ€์ž…
	public void memreg(LoginVO member);
	//2) ๋กœ๊ทธ์ธ
	public LoginVO login(LoginVO member);
	//3) ํšŒ์› ๋ฆฌ์ŠคํŠธ
	public ArrayList<LoginVO> memlist();
	//4) ํšŒ์› ์ƒ์„ธ ์ •๋ณด ์กฐํšŒ ํŽ˜์ด์ง€ (๊ด€๋ฆฌ์ž ์ „์šฉ)
	//public LoginVO memlistDetail(String id);//[#๋ฉ”์„œ๋“œ ์„ ์–ธ#]
	public LoginVO memlistDetail(LoginVO login);
	//5) ํšŒ์› ์ •๋ณด ์ˆ˜์ • 
	public void memberModify(LoginVO login);
	//6) ํšŒ์› ์ •๋ณด ์‚ญ์ œ
	public void memberRemove(LoginVO login);
}



์ฝ”๋“œ 6) LoginMapper.xml

์ฒ˜์Œ์— ์˜ค๋ฅ˜๊ฐ€ ๋‚œ ์ด์œ ๋Š” <update>, <delete>๋ฅผ ์จ์•ผ ํ•˜๋Š” ๋ฐ ๊ทธ๋Œ€๋กœ <select>๋ฅผ ์จ์„œ์ด๋‹ค. 

<?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="org.hj.mapper.LoginMapper">
  
  <!-- #####์ƒˆ๋กœ ์ถ”๊ฐ€ํ•จ##### -->
  <!-- 1) ํšŒ์›๊ฐ€์ž… -->
	<insert id="memreg"> <!-- LoginMapper.java์˜ memreg๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค. insertํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.-->
  		insert into member (id, password, name, birthday, gender)
  		values(#{id},#{password},#{name},sysdate(),"f");
	</insert>
  
  	<!-- 2) ๋กœ๊ทธ์ธ -->
	<select id="login" resultType="org.hj.model.LoginVO"> <!-- ๊ตฌํ˜„๋ฉ”์„œ๋“œ๊ฐ€ ์—†์œผ๋‹ˆ๊นŒ return์ด ์—†๋‹ค. -->
	<!-- ๋Œ€์‹  select๋Š” resultType์ด๋ผ๋Š” ํƒ€์ž…์ด return ์—ญํ• ์ด๋‹ค. -->
  		select id, password <!-- ๊ฒฐ๊ณผ๋Š” ํ•œ ๊ฑด์ด๋‹ค. id๋Š” ๊ธฐ๋ณธํ‚ค์ด๋‹ค. -->
  		from member
  		where id=#{id} and password=#{password}
	</select>
  	
  	<!-- 3) ํšŒ์› ๊ด€๋ฆฌ ๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€ -->
  	<select id="memlist" resultType="org.hj.model.LoginVO">
  	
  		select * from member <!-- ๊ฒฐ๊ณผ๋Š” ์—ฌ๋Ÿฌ ๊ฑด์ด๋‹ค. LoginVOํƒ€์ž…์˜ ๋ฐฐ์—ด์ด ํ•„์š”ํ•˜๋‹ค!-->
  		  		
  	</select>
  	
	<!-- 4) ํšŒ์› ์ƒ์„ธ ์ •๋ณด ์กฐํšŒ ํŽ˜์ด์ง€ (๊ด€๋ฆฌ์ž ์ „์šฉ) -->
  	<select id="memlistDetail" resultType="org.hj.model.LoginVO"> <!-- select๋œ ๊ฒฐ๊ณผ๋ฅผ org.hj.model.LoginVO ํด๋ž˜์Šค์— ์ €์žฅํ•œ๋‹ค. -->
  	
  		select * 
  		from member 
  		where id=#{id} <!-- id๋ฅผ ๋Œ๊ณ ์˜ค๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค. ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•: String id, LoginVO๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.-->
  		  		
  	</select>
  	
  	<!-- 5) ํšŒ์› ์ •๋ณด ์ˆ˜์ • -->
 	<update id="memberModify"> 
  		update member <!-- update ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋‚ด์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‹ค์‹œ select๋ฅผ ํ•œ๋‹ค. -->
		set name = #{name},
			password = #{password},
    		phone = #{phone}
		where id = #{id} 		
  	</update>
  	
  	<!-- 6) ํšŒ์› ์ •๋ณด ์‚ญ์ œ -->
 	<delete id="memberRemove">
		delete from member 
		where id = #{id}  		
  	</delete>
  </mapper>

๊ฒฐ๊ณผ) ํšŒ์› ์ •๋ณด ์ˆ˜์ •ํ•˜๊ธฐ

id0329๋ฅผ ์ˆ˜์ • ๋ฐ ์‚ญ์ œํ•˜๊ธฐ๋กœ ํ•œ๋‹ค.

์ˆ˜์ •์ „
๋น„๋ฐ€๋ฒˆํ˜ธ, ํฐ๋ฒˆํ˜ธ, ์ด๋ฆ„์„ ์ˆ˜์ •ํ•œ๋‹ค.
MySQL์— ์ˆ˜์ • ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค.


๊ฒฐ๊ณผ) ํšŒ์› ์ •๋ณด ์‚ญ์ œํ•˜๊ธฐ

์‚ญ์ œ ๋ฒ„ํŠผ ํด๋ฆญ ํ›„ ๊ฒŒ์‹œํŒ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋ฐ”๋กœ ๋œจ๋Š”๋ฐ ์‚ญ์ œ๋๋‹ค.
MySQL์—๋„ ์•ˆ ๋ณด์ธ๋‹ค.


728x90
๋ฐ˜์‘ํ˜•
Comments