Spring Boot - Sign up member ๐Ÿฑโ€๐Ÿ

ํ™”์ดํ‹ฐ ยท2024๋…„ 1์›” 9์ผ

SpringBoot

๋ชฉ๋ก ๋ณด๊ธฐ
2/3

Repository

MemberRepository interface

Repository ~ myBatis:scan

  • ์ดํŒŒ์ผ์ด jpa repository์ž„์„ ๋ช…์‹œ, scan๋˜๋„๋ก ํ•จ
  • repository๋Š” ๋ฐ˜๋“œ์‹œ jpaRepository interface๋ฅผ ์ƒ์† ๋ฐ›์•„์•ผํ•จ!!
    JpaRepository<T,ID>
    T: table๊ณผ ์—ฐ๊ณผ๋œ entity (db)
    ID: entity ๋‚ด pk(id)์˜ ์ž๋ฃŒํ˜•
    jpa ์‚ฌ์šฉํ•˜๋ฉด sql๋ฌธ ์“ฐ์ง€ ๋ง์ž!
package com.smhrd.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.smhrd.entity.Tbl_Member;


@Repository 
public interface MemberRepository extends JpaRepository<Tbl_Member, String>{
	
}

Entity (DTO)

Tbl_Member.java

DTO: Data Transfer Object

  • db์˜ table์—์„œ ์ปฌ๋Ÿผ์ด dto์˜ ํ•„๋“œ๋กœ ์กด์žฌํ•ด์•ผํ•จ (์ด๋ฆ„๋„ ๊ฐ™์•„์•ผํ•จ)
  • ๋ฐ˜๋“œ์‹œ ํ•„๋“œ๋“ค์— ๋Œ€ํ•œ Getter/Setter ์žˆ์–ด์•ผํ•จ
  • ๊ธฐ๋ณธ์ƒ์„ฑ์ž๊ฐ€ ์žˆ์–ด์•ผ๋งŒํ•จ (Spring, Mybatis)
  • ORM
  • Java ๊ฐ์ฒด์™€db์˜ table์ด ์—ฐ๊ฒฐ
  • java dto ๋ฅผ ์„ค๊ณ„๋งŒ ํ•ด๋„ DB์— ๋ฐ์ด๋ธ”์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ
package com.smhrd.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Entity
@AllArgsConstructor  //์ „์ฒด ํ•„๋“œ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์ƒ์„ฑ์ž
@NoArgsConstructor //๊ธฐ๋ณธ์ƒ์„ฑ์ž
@Data // Getter/Setter
public class Tbl_Member {
    @Id
	@Column (length = 50, updatable = false )
	private String email;
	//pw
	@Column (length = 50, nullable = false )
	private String pw;
	//tel
	private String tel;
	//address
	private String address;
}

Controller

  • MemberController.java
package com.smhrd.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.smhrd.entity.Tbl_Member;
import com.smhrd.repository.MemberRepository;

@Controller
@RequestMapping("/guest")
public class MemberController {
		//interface-> ์ถ”์ƒ๋ฉ”์†Œ๋“œ ๋ฐ–์— ์—†์Œ -> ๊ฐ์ฒด ์ƒ์„ฑ ๋ถˆ๊ฐ€
	@Autowired // Spring ๋ฉ”๋ชจ๋ฆฌ (spring container)๋‚ด์—์„œ ๋„ฃ๋Ÿฌ์ค„ ์ˆ˜ ์ž„ใ……๋Š” ๊ฐ์ฒด๋ฅผ ์–ผ์•„์„œ ์ฐพ์•„
	private MemberRepository repo;
	
	
	//http://localhost:8088/{contextpath}/{mapping}/{URLMapping}
	//http: localhost:8088/boot/main
	//main์ด๋ผ๊ณ  ์š”์ฒญํ–ˆ์„๋•Œ ,main.jsp ๋กœ ์ด๋™
	@RequestMapping ("/main")
	public String goMain() {
		
		return "guest/main";
	}
	@RequestMapping("/join")
	public String join(Tbl_Member member) {
	// 1. ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘
	//2. ๋กœ์ง ์‹คํ–‰
		//์ˆ˜์ง‘ํ•œ ์ •๋ณด๋ฅผ db์— ์ €์žฅํ•˜๋Š” ์ฝ”๋“œ
	// 3. View ์„ ํƒ / ๋ฐ์ดํ„ฐ ์‘๋‹ต
//jpa ์˜ save: 
		//1. ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ select
		//2. ์žˆ์œผ๋ฉด --> update
		//์—†์œผ๋ฉด --> insert
		repo.save(member);
		return "guest/join_success";
	}
	
}

Main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>  
<!--  Context path๊ฐ’์„ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋„๋ก -->
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c"  %>
<% String cpath = request.getContextPath(); 
    pageContext.setAttribute("cpath",cpath);
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<title>Forty by HTML5 UP</title>
		<meta charset="UTF-8" />
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<!--  href๋‚˜ src ์†์„ฑ์•ˆ์—์„œ ํด๋” ๋ช…์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ
		>> https://localhost:8088/{ContextPath}/{mapping}/+"href || src"
		>> ์ž˜๋ชป๋œ ๊ฒฝ๋กœ
		/๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ์œ 
		>> http: //localhost: 8088/+ "href || src"
		 -->
		<link rel="stylesheet" href="${cpath}/assets/css/main.css" />
	</head>
	<body>

		<!-- Wrapper -->
			<div id="wrapper">

				<!-- Header -->
					<header id="header" class="alt">
						<a href="index.html" class="logo"><strong>Forty</strong> <span>by HTML5 UP</span></a>
						<nav>
								<a href="#menu">๋กœ๊ทธ์ธ</a>
							<!--Ex07. ๋กœ๊ทธ์ธ ํ•œ ์ƒํƒœ๋ผ๋ฉด '๊ฒŒ์‹œํŒ'๋ฒ„ํŠผ๊ณผ '๊ฐœ์ธ์ •๋ณด์ˆ˜์ •', '๋กœ๊ทธ์•„์›ƒ' ๋ฒ„ํŠผ์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค. -->
						</nav>
					</header>

				<!-- Menu -->
					<nav id="menu">	
						<ul class="links">
							<%--Ex07. ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๋งŒ๋“ค๊ธฐ : ์‚ฌ์šฉ์ž์—๊ฒŒ ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ํšŒ์›์ธ์ง€ ์•„๋‹Œ์ง€ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด ๋ด…์‹œ๋‹ค. --%>
							<li><h5>๋กœ๊ทธ์ธ</h5></li>
								<form>
									<li><input type="text"  placeholder="Email์„ ์ž…๋ ฅํ•˜์„ธ์š”"></li>
									<li><input type="password"  placeholder="PW๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”"></li>
									<li><input type="submit" value="LogIn" class="button fit"></li>
								</form>
						</ul>
						<ul class="actions vertical">
							<%--Ex06. ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ ๋งŒ๋“ค๊ธฐ : ์‚ฌ์šฉ์ž์—๊ฒŒ ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์ €์žฅํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด ๋ด…์‹œ๋‹ค. --%>
							<li><h5>ํšŒ์›๊ฐ€์ž…</h5></li>
							<!--  /boot/guest/join -->
								<form action = "${cpath}/guest/join" method = "post">
									<li><input name = "email" type="text"  placeholder="Email์„ ์ž…๋ ฅํ•˜์„ธ์š”"></li>
									<li><input name = "pw" type="password"  placeholder="PW๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”"></li>
									<li><input name = "tel" type="text"  placeholder="์ „ํ™”๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”"></li>
									<li><input name = "address" type="text"  placeholder="์ง‘์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”"></li>
									<li><input type="submit" value="JoinUs" class="button fit"></li>
								</form>
						</ul>
					</nav>			
				<!-- Banner -->
					<section id="banner" class="major">
						<div class="inner">
							<header class="major">
								<%--Ex07. ๋กœ๊ทธ์ธ ํ›„ ๋กœ๊ทธ์ธ ํ•œ ์‚ฌ์šฉ์ž์˜ ์„ธ์…˜์•„์ด๋””๋กœ ๋ฐ”๊พธ์‹œ์˜ค. ex)smart๋‹˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค --%>
									<h1>๋กœ๊ทธ์ธ ํ•œ ์„ธ์…˜์•„์ด๋””๋ฅผ ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š”</h1>
							</header>
							<div class="content">
								<p>์•„๋ž˜๋Š” ์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์šด ์›น ๊ธฐ์ˆ ๋“ค์ž…๋‹ˆ๋‹ค.<br></p>
								<ul class="actions">
									<li><a href="#one" class="button next scrolly">ํ™•์ธํ•˜๊ธฐ</a></li>
								</ul>
							</div>
						</div>
					</section>

				<!-- Main -->
					<div id="main">

						<!-- One -->
							<section id="one" class="tiles">
								<article>
									<span class="image">
										<img src="${cpath}/images/pic01.jpg" alt="" />
									</span>
									<header class="major">
										<h3><a href="#" class="link">HTML</a></h3>
										<p>ํ™ˆํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๊ธฐ์ดˆ ์–ธ์–ด</p>
									</header>
								</article>
								<article>
									<span class="image">
										<img src="${cpath}/images/pic02.jpg" alt="" />
									</span>
									<header class="major">
										<h3><a href="#" class="link">CSS</a></h3>
										<p>HTML์„ ๋””์ž์ธํ•ด์ฃผ๋Š” ์–ธ์–ด</p>
									</header>
								</article>
								<article>
									<span class="image">
										<img src="${cpath}/images/pic03.jpg" alt="" />
									</span>
									<header class="major">
										<h3><a href="#" class="link">Servlet/JSP</a></h3>
										<p>Java๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ํ•œ ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด/์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด</p>
									</header>
								</article>
								<article>
									<span class="image">
										<img src="${cpath}/images/pic04.jpg" alt="" />
									</span>
									<header class="major">
										<h3><a href="#" class="link">JavaScript</a></h3>
										<p>HTML์— ๊ธฐ๋ณธ์ ์ธ ๋กœ์ง์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด</p>
									</header>
								</article>
								<article>
									<span class="image">
										<img src="${cpath}/images/pic05.jpg" alt="" />
									</span>
									<header class="major">
										<h3><a href="#" class="link">MVC</a></h3>
										<p>์›น ํ”„๋กœ์ ํŠธ ์ค‘ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋””์ž์ธํŒจํ„ด</p>
									</header>
								</article>
								<article>
									<span class="image">
										<img src="${cpath}/images/pic06.jpg" alt="" />
									</span>
									<header class="major">
										<h3><a href="#" class="link">Web Project</a></h3>
										<p>์—ฌ๋Ÿฌ๋ถ„์˜ ์ตœ์ข…ํ”„๋กœ์ ํŠธ์— ์›น ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•˜์„ธ์š”!</p>
									</header>
								</article>
							</section>
					<!-- Two -->
							<section id="two">
								<div class="inner">
									<header class="major">
										<h2>๋ฉ”์„ธ์ง€ ํ™•์ธํ•˜๊ธฐ</h2>
									</header>
									<%-- chatting ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด ๋ด…์‹œ๋‹ค! --%>
									<div class="container chat">
									
										<div class="other">
											<p>๋ณด๋‚ธ์‚ฌ๋žŒ ์ด๋ฆ„ :</p>
											<p>๋‹ค๋ฅธ์‚ฌ๋žŒ์—๊ฒŒ์„œ ์˜จ ๋ฉ”์„ธ์ง€</p>
										</div>
										
										<div class="mychat">
											<p>๋‚ด๊ฐ€๋ณด๋‚ธ ์ฑ„ํŒ…</p>
										</div>
										
										<div class="other">
											<p>๋ณด๋‚ธ์‚ฌ๋žŒ ์ด๋ฆ„2 :</p>
											<p>๋‹ค๋ฅธ์‚ฌ๋žŒ์—๊ฒŒ์„œ ์˜จ ๋ฉ”์„ธ์ง€2</p>
										</div>
										
										
									</div>
									<%-- ์ฑ„ํŒ…์ฐฝ ๋! --%>
								</div>
							</section>

					</div>

				<!-- Contact -->
					<section id="contact">
						<div class="inner">
							<section>
								<form>
									<div class="field">
										<label for="message">Message</label>
										<textarea  id="message" rows="6"></textarea>
									</div>
									<ul class="actions">
										<li><input type="button" value="Send Message" class="special" /></li>
										<li><input type="reset" value="Clear" /></li>
									</ul>
								</form>
							</section>
							
							<%--Ex07. ๋กœ๊ทธ์ธ ํ•œ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋กœ ๋ณ€๊ฒฝํ•ด ๋ด…์‹œ๋‹ค. --%>
							<section class="split">
								<section>
									<div class="contact-method">
										<span class="icon alt fa-envelope"></span>
										<h3>Email</h3>
										<a href="#">๋กœ๊ทธ์ธ ํ•œ ์‚ฌ๋žŒ์˜ ์ด๋ฉ”์ผ์„ ์ถœ๋ ฅ</a>
										<!-- ๋กœ๊ทธ์ธ ํ•œ ์‚ฌ์šฉ์ž์˜ ์ด๋ฉ”์ผ์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค -->
									</div>
								</section>
								<section>
									<div class="contact-method">
										<span class="icon alt fa-phone"></span>
										<h3>Phone</h3>
										<span>๋กœ๊ทธ์ธ ํ•œ ์‚ฌ๋žŒ์˜ ์ „ํ™”๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅ</span>
										<!-- ๋กœ๊ทธ์ธ ํ•œ ์‚ฌ์šฉ์ž์˜ ์ „ํ™”๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค -->
									</div>
								</section>
								<section>
									<div class="contact-method">
										<span class="icon alt fa-home"></span>
										<h3>Address</h3>
										<span>๋กœ๊ทธ์ธ ํ•œ ์‚ฌ๋žŒ์˜ ์ง‘์ฃผ์†Œ๋ฅผ ์ถœ๋ ฅ</span>
										<!-- ๋กœ๊ทธ์ธ ํ•œ ์‚ฌ์šฉ์ž์˜ ์ง‘์ฃผ์†Œ๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค -->
									</div>
								</section>
							</section>					
						</div>
					</section>

				<!-- Footer -->
					<footer id="footer">
						<div class="inner">
							<ul class="icons">
								<li><a href="#" class="icon alt fa-twitter"><span class="label">Twitter</span></a></li>
								<li><a href="#" class="icon alt fa-facebook"><span class="label">Facebook</span></a></li>
								<li><a href="#" class="icon alt fa-instagram"><span class="label">Instagram</span></a></li>
								<li><a href="#" class="icon alt fa-github"><span class="label">GitHub</span></a></li>
								<li><a href="#" class="icon alt fa-linkedin"><span class="label">LinkedIn</span></a></li>
							</ul>
							<ul class="copyright">
								<li>&copy; Untitled</li><li>Design: <a href="https://html5up.net">HTML5 UP</a></li>
							</ul>
						</div>
					</footer>

			</div>

		<!-- Scripts -->
			<script src="${cpath}/assets/js/jquery.min.js"></script>
			<script src="${cpath}/assets/js/jquery.scrolly.min.js"></script>
			<script src="${cpath}/assets/js/jquery.scrollex.min.js"></script>
			<script src="${cpath}/assets/js/skel.min.js"></script>
			<script src="${cpath}/assets/js/util.js"></script>
			<!--[if lte IE 8]><script src="${cpath}/assets/js/ie/respond.min.js"></script><![endif]-->
			<script src="${cpath}/assets/js/main.js"></script>

	</body>
</html>

profile
์—ด์‹ฌํžˆ ๊ณต๋ถ€ํ•ฉ์‹œ๋‹ค! The best is yet to come! ๐Ÿ’œ

0๊ฐœ์˜ ๋Œ“๊ธ€