티스토리 뷰

1️⃣ 일정보관함 목록 테스트

 

Oracle SQL Developer를 통해 travel 테이블에 임의로 데이터 값을 넣었고, userID별로 일정보관함 화면에 잘 출력되는지 테스트 해봤다.

 

 

데이터를 가져와 출력은 잘 되는데 내 구현의도와 다른 부분이 많았다.

  1. 일정을 저장할 때 마다 카드가 하나씩 생성되어야 하는데 지금은 그냥 카드 세 개에 저장된 같은 내용이 반복되는 모습이다.
    ⇒ ⚠ 저장한 일정 갯수마다 늘어나는 카드 갯수 작업 필요
  2. 지역코드가 아닌 지역명이 나오길 바랬는데…ERD를 다시 보니 TRAVEL 테이블에 지역명 ENTITY가 없었다.
    ⇒ ⚠ TRAVEL 테이블에 지역명(areaName) 추가 작업 필요
  3. TRAVEL 테이블에 사진이 들어갈 ENTITY도 없었다. 카드 형식으로 들어가려면 사진이 있는게 훨씬 더 보기 좋을것 같다.
    ⇒ ⚠ TRAVEL 테이블에 사진(image) 추가 작업 필요
  4. 추가로 페이징 처리가 필요하다

 

 


 

 

 

2️⃣ 일정 삭제하기 로직 구현

일정 상세하기를 마저 구현해야 하지만 그건 일정만들기팀이 구현완료가 된 후 하기로 하고, 일정 삭제하기를 먼저 구현했다.

✅TravelListController.java
package com.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

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.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;

import com.dto.MemberDTO;
import com.dto.PageDTO2;
import com.dto.PlanDTO;
import com.dto.TravelListDTO;
import com.info.Info;
import com.service.MakeTravelService;
import com.service.PlanService;
import com.service.PlanServiceImpl;
import com.service.TravelListService;
import com.service.TravelListServiceImpl;

@Controller
public class TravelListController {
	private Info info = new Info();
	
	@Autowired
	TravelListServiceImpl service;
	
	@Autowired
	MakeTravelService MTService;
    
    	// 일정 삭제하기
	@GetMapping("/loginCheck/travelDel")
	public String travelDel(@RequestParam("travelID") int travelID) {
		service.travelDel(travelID);
		return "redirect:travelList";
	}
}​

 

/travelDel 경로로의 GET 요청이 있을 때 이 메서드가 호출된다.

메서드는 @RequestParam 어노테이션을 사용해 URL의 파라미터 중에서 'travelID' 라는 이름을 가진 파라미터를 받게 되고, 이 travelID 를 삭제할 일정 데이터의 고유 식별자로 사용하였다.

그리고 메서드 내부에 service.travelDel(travelID)를 호출하여 travelID를 이용해 여행 데이터를 삭제하는 작업을 수행한다.




✅TravelListDAO.java

package com.dao;

import java.util.List;

import org.apache.ibatis.session.RowBounds;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.dto.PageDTO2;
import com.dto.PlanDTO;
import com.dto.TravelListDTO;

@Repository
public class TravelListDAO {
	
	@Autowired // SqlSessionTemplate 주입
	SqlSessionTemplate session;
    
    // 일정 삭제하기
	public int travelDel(int travelID) {
		return session.delete("TravelMapper.travelDel", travelID);
	}
    
}

TravelDAO

1. int 라는 반환값은 삭제된 레코드 수를 나타낸다.

2. 그리고 메서드는 삭제할 일정 데이터의 고유 식별자인 travelID 라는 정수형 파라미터는 받게 된다. 다시 한번 풀어말하면, 삭제할 레코드를 식별하기 위한 것이다.

3. session.delete("TravelMapper.travelDel", travelID) 부분은 MyBatis의 SQL 세션을 사용하여 데이터베이스에서 여행 데이터를 삭제하는 부분이다. TravelMapper.travelDel은 MyBatis의 매퍼에서 정의된 SQL 문의 ID이다. travelID는 SQL 문에 전달할 파라미터로 사용되고, 앞에서 말했듯 이를 통해 어떤 일정의 데이터를 삭제할지 결정된다!




TravelListService.java

package com.service;

import java.util.List;

import com.dto.PageDTO2;
import com.dto.PlanDTO;
import com.dto.TravelListDTO;

public interface TravelListService {
	//일정 삭제하기
	public int travelDel(int travelID);
}





✅ TravelListServiceImpl.java

package com.service;

import java.util.List;

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

import com.dao.BoardDAO;
import com.dao.TravelListDAO;
import com.dto.PageDTO2;
import com.dto.PlanDTO;
import com.dto.TravelListDTO;

	@Service
	public class TravelListServiceImpl implements TravelListService {

	@Autowired
	TravelListDAO dao;
	
	@Autowired
	BoardDAO boardDao;
    
    	// 일정 삭제하기
	@Override
	public int travelDel(int travelID) {
		int n = dao.travelDel(travelID);
		return n;
	}
	
}

int n = dao.travelDel(travelID); : dao 객체의 travelDel 메서드를 호출해서 데이터베이스에서 일정 데이터를 식별한다.

return n; : 삭제 작업이 성공하면 n 이라는 정수값을 반환하게 되는데 삭제된 레코드 수이다. 작업이 성공적으로 수행되면 양수 값을 반환하게 된다. ( 삭제 작업의 결과 )




✅ TravelMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
  
<mapper namespace="TravelMapper">

<!-- 일정 삭제하기 -->
	<delete id="travelDel" parameterType="int" >
		delete from travel
		where travelID = #{travelID}
	</delete>

 



✅  travelList.jsp - 삭제 button 이벤트

  • $(".deleteBtn").on("click", function() { ... }); : 클래스가 "deleteBtn"인 모든 요소에 대한 클릭 이벤트 리스너를 추가
  • var travelID = $(this).attr("data-travelID"); : 삭제 버튼에서 data-travelID 속성을 가져와 travelID 변수에 할당
  • var confirmed = confirm("정말 삭제하시겠습니까?"); : 사용자에게 "정말 삭제하시겠습니까?"라는 확인 메시지를 표시하고 확인 또는 취소를 클릭한 경우 confirmed 변수에 true 또는 false를 할당
  • if (confirmed) { ... } : 사용자가 확인을 클릭한 경우, location.href를 사용하여 선택된 travelID를 가진 travelDel 페이지로 이동한다.
  • c:forEach: ${travelList}의 요소를 반복하면서 일정 카드를 생성한다.
  • "삭제" 버튼: 삭제 버튼은 .deleteBtn 클래스를 가지며 클릭 이벤트에 대한 JavaScript 코드와 data-travelID 속성을 통해 해당 일정의 travelID를 전달한다. 클릭한 경우 JavaScript 코드에서 확인 메시지를 표시하고 확인한 경우 해당 일정을 삭제하는 페이지로 이동한다.


결과)



 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
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 31
글 보관함