spring - 데이터 조회, 추가 ,제거
컨트롤러
- 파일명: MemberController.java
-> 요청과 응답을 담당함.
-> view 와 model 사이에서 로직을 담당함.
package com.example.controller;
import java.util.List;
import com.example.entity.Member;
import com.example.service.MemberDB;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
// 파일을 만들어서 관리하는게 편함
@RequestMapping(value = "/member")
public class MemberController {
// BD에 일의 수행하는 클래스
// 클래스명 obj = new 클래스명();
@Autowired
private MemberDB memberDB;
// 삭제하기
// 127.0.0.1:8080/member/delete?id=12
// <form action="" method="get">
// <input type="text" name="id" value="12">
// <a href="/member/delete?id=12"></a>
@GetMapping(value = {"/delete"})
public String deleteGET(@RequestParam(name="id") String id){
int ret = memberDB.deleteMember(id);
if (ret == 1) {
return "redirect:/member/selectlist";
}
return "redirect:/member/selectlist";
}
// 조회하기
// 127.0.0.1:8080/member/selectlist
@GetMapping(value = {"/selectlist"})
public String selectlistGET(Model model){
// 1. DB에서 목록 받아오기
List<Member> list = memberDB.selectListMember();
// 2. jsp로 전달하기(jsp에서의 변수명, 실제 전송값)
model.addAttribute("list", list);
// 3. member 폴더의 select.jsp를 표시하라
return "member/select";
}
// 127.0.0.1:8080/member/insert
@GetMapping(value = {"/insert"})
public String insertGET(){
// member_insert.jsp로 생성
// member 폴더에 있는 insert.jsp 표시
return "member/insert";
}
// post는 사용자가 입력한 내용이 전달되고 DB 작업을 위해서 필요한 시점
// jsp를 표시하는게 아니라 주소창에 입력후 엔터키를 누름
@PostMapping(value = {"/insert"})
public String insertPOST(
// 객체를 하나로 묶는 것.
// jsp 와 entity 각 객체의 변수명을 일치시켜줘야함.
@ModelAttribute Member mem ){
System.out.println( mem.toString() );
// 설계 부분을 사용
memberDB.insertMember(mem);
// 주소창에 /member/insert를 입력후
// 엔터키를 누르는것과 같은 역할
return "redirect:/member/insert";
}
}
- Annotation
-> @Controller : 컨트롤러 설정을 해줌
-> @PostMapping, @RequestMapping, @GetMapping : value값에 해당하는 클래스나 메소드를 가져와서 실행
-> Autowired : 클래스를 변수엔 자동으로 담는다?
entity(Model)
-> 클라이언트가 요청할 데이터를 지정한다.
- 파일명: Member.java
package com.example.entity;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@NoArgsConstructor
@ToString
// DB 컬렉션 지정
@Document(collection = "member3")
// entity는 DB 에 들어갈 column 의 객체
public class Member {
@Id
private String id = null;
private String pw = null;
private String pw1 = null;
private String name = null;
private int age = 0;
}
추가하기
템플릿(jsp)
- 파일명: insert.jsp
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>회원가입</title>
<!-- bootstrap/css -->
<link rel="stylesheet" type="text/css" th:href="@{/css/bootstrap.css}" />
<!-- bootstrap/js -->
<script type="text/javascript" th:src="@{/js/bootstrap.min.js}"></script>
</head>
<body>
<div>
<h3>회원가입</h3>
<!-- th는 thymeleaf -->
<!-- thymeleaf: 템플릿 엔진, 컨트롤러가 전달하는 데이터를 이용하여 화면 구현 -->
<form th:action="@{/member/insert}" method="post">
아이디: <input type="text" name="id" /> <br />
암호: <input type="password" name="pw" /> <br />
암호2: <input type="password" name="pw1" /> <br />
이름: <input type="text" name="name" /> <br />
나이: <input type="text" name="age" /> <br />
<input type="submit" class="btn btn-primary" value="회원가입" />
</form>
</div>
</body>
</html>
설계부 interface
- 파일명: MemberDB.java
package com.example.service;
import com.example.entity.Member;
import org.springframework.stereotype.Service;
// DB 와 연동하는 부분
// 구현하는 설계 부분
@Service
public interface MemberDB {
// 추가할 내용을 member로 주면 추가한 후에
// 실제 추가된 내용을 반환
public Member insertMember(Member member);
}
구현부
- 파일명: MemberDBImpl.java
package com.example.service;
import com.example.entity.Member;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Service;
// DB 연동을 실제로 수행하는 구현부
// 구현부는 프레임워크에 따라서 안만듬..
@Service
public class MemberDBImpl implements MemberDB {
// 환경설정으로 생성된 객체를 가져옴
@Autowired
private MongoTemplate mongodb;
@Override
public Member insertMember(Member member) {
try {
return mongodb.insert(member);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
조회하기, 삭제하기
- 파일명: member/select.jsp
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>회원목록</title>
<!-- bootstrap/css -->
<link rel="stylesheet" type="text/css" th:href="@{/css/bootstrap.css}" />
<!-- bootstrap/js -->
<script type="text/javascript" th:src="@{/js/bootstrap.min.js}"></script>
</head>
<body>
<div>
<h3>회워목록</h3>
<hr />
<table class="table">
<tr>
<th>아이디</th>
<th>이름</th>
<th>나이</th>
<th>버튼</th>
</tr>
<!-- entity 의 변수를 사용 -->
<tr th:each="tmp, idx : ${list}">
<td th:text="${tmp.id}"></td>
<td th:text="${tmp.name}"></td>
<td th:text="${tmp.age}"></td>
<td>
<a href="#">수정</a>
<a th:href="@{/member/delete(id=${tmp.id})}">삭제</a>
<!-- <form th:action="@{/member/delete}" method="get">
<input type="hidden" name="id" th:value="${tmp.id}" />
<input type="submit" value="삭제1">
</form> -->
</td>
</tr>
</table>
</div>
</body>
</html>
interface
- 파일명: MemberDB.java
package com.example.service;
import java.util.List;
import com.example.entity.Member;
import org.springframework.stereotype.Service;
// DB 와 연동하는 부분
// 구현하는 설계 부분
@Service
public interface MemberDB {
// 추가할 내용을 member로 주면 추가한 후에
// 실제 추가된 내용을 반환
public Member insertMember(Member member);
// 회원 전체목록(page, search X)
public List<Member> selectListMember();
// 회원 1명 삭제(회원 아이디가 오면 삭제후 -1, 0 또는 1로 리턴)
public int deleteMember(String id);
}
implements
- 파일명: MemberDBImpl.java
package com.example.service;
import java.util.List;
import com.example.entity.Member;
import com.mongodb.client.result.DeleteResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
// DB 연동을 실제로 수행하는 구현부
// 구현부는 프레임워크에 따라서 안만듬..
@Service
public class MemberDBImpl implements MemberDB {
// 환경설정으로 생성된 객체를 가져옴
@Autowired
private MongoTemplate mongodb;
@Override
public Member insertMember(Member member) {
try {
return mongodb.insert(member);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
@Override
public List<Member> selectListMember() {
try {
Query query = new Query();
return mongodb.find(query, Member.class);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
@Override
public int deleteMember(String id) {
try {
Member member = new Member();
member.setId(id);
DeleteResult result = mongodb.remove(member);
if (result.getDeletedCount() == 1L) {
return 1;
}
return 0;
} catch (Exception e) {
e.printStackTrace();
return -1;
}
}
}
Author And Source
이 문제에 관하여(spring - 데이터 조회, 추가 ,제거), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kim_minju/spring-데이터-조회-추가-제거저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)