728x90
2021/05/25(화)
Spring 공유 캘린더 프로젝트 일정조회 알고리즘 참고
https://cordingdoah.tistory.com/119
일정을 화면에 보였으니 일정을 수정하고 삭제하는 코드를 구현해보겠다.
<HomeController.java>
package org.zerock.controller;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.ibatis.session.SqlSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import org.zerock.dao.ScheduleDao;
import org.zerock.data.DateData;
import org.zerock.dto.ScheduleDto;
import lombok.extern.log4j.Log4j;
/**
* Handles requests for the application home page.
*/
@Controller
@Log4j
public class HomeController {
@Autowired
public SqlSession sqlSession;
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
@RequestMapping(value = "calendar.do", method = RequestMethod.GET)
public String calendar(Model model, HttpServletRequest request, DateData dateData) {
Calendar cal = Calendar.getInstance();
DateData calendarData;
// 검색 날짜
if (dateData.getDate().equals("") && dateData.getMonth().equals("")) {
dateData = new DateData(String.valueOf(cal.get(Calendar.YEAR)), String.valueOf(cal.get(Calendar.MONTH)),
String.valueOf(cal.get(Calendar.DATE)), null, null);
}
Map<String, Integer> today_info = dateData.today_info(dateData);
List<DateData> dateList = new ArrayList<DateData>();
// 검색 날짜 end
ScheduleDao scheduleDao = sqlSession.getMapper(ScheduleDao.class);
ArrayList<ScheduleDto> Schedule_list = scheduleDao.schedule_list(dateData);
// 달력데이터에 넣기 위한 배열 추가
ScheduleDto[][] schedule_data_arr = new ScheduleDto[32][4];
if (Schedule_list.isEmpty() != true) {
int j = 0;
for (int i = 0; i < Schedule_list.size(); i++) {
int date = Integer.parseInt(String.valueOf(Schedule_list.get(i).getSchedule_date()).substring(
String.valueOf(Schedule_list.get(i).getSchedule_date()).length() - 2,
String.valueOf(Schedule_list.get(i).getSchedule_date()).length()));
if (i > 0) {
int date_before = Integer.parseInt(String.valueOf(Schedule_list.get(i - 1).getSchedule_date())
.substring(String.valueOf(Schedule_list.get(i - 1).getSchedule_date()).length() - 2,
String.valueOf(Schedule_list.get(i - 1).getSchedule_date()).length()));
if (date_before == date) {
j = j + 1;
schedule_data_arr[date][j] = Schedule_list.get(i);
} else {
j = 0;
schedule_data_arr[date][j] = Schedule_list.get(i);
}
} else {
schedule_data_arr[date][j] = Schedule_list.get(i);
}
}
}
// 실질적인 달력 데이터 리스트에 데이터 삽입 시작.
// 일단 시작 인덱스까지 아무것도 없는 데이터 삽입
for (int i = 1; i < today_info.get("start"); i++) {
calendarData = new DateData(null, null, null, null, null);
dateList.add(calendarData);
}
// 날짜 삽입
for (int i = today_info.get("startDay"); i <= today_info.get("endDay"); i++) {
ScheduleDto[] schedule_data_arr3 = new ScheduleDto[4];
schedule_data_arr3 = schedule_data_arr[i];
if (i == today_info.get("today")) {
calendarData = new DateData(String.valueOf(dateData.getYear()), String.valueOf(dateData.getMonth()),
String.valueOf(i), "today", schedule_data_arr3);
} else {
calendarData = new DateData(String.valueOf(dateData.getYear()), String.valueOf(dateData.getMonth()),
String.valueOf(i), "normal_date", schedule_data_arr3);
}
dateList.add(calendarData);
}
// 달력 빈 곳 빈 데이터로 삽입
int index = 7 - dateList.size() % 7;
if (dateList.size() % 7 != 0) {
for (int i = 0; i < index; i++) {
calendarData = new DateData(null, null, null, null, null);
dateList.add(calendarData);
}
}
// 배열에 담음
model.addAttribute("dateList", dateList); // 날짜 데이터 배열
model.addAttribute("today_info", today_info);
return "schedule/calendar";
}
@RequestMapping(value = "schedule_add.do", method = RequestMethod.GET)
public String schedule_add(HttpServletRequest request, ScheduleDto scheduleDto, RedirectAttributes rttr) {
ScheduleDao scheduleDao = sqlSession.getMapper(ScheduleDao.class);
int count = scheduleDao.before_schedule_add_search(scheduleDto);
String message = "";
String url = "redirect:calendar.do";
if (count >= 4) {
message = "스케쥴은 최대 4개만 등록 가능합니다.";
} else {
scheduleDao.schedule_add(scheduleDto);
message = "스케쥴이 등록되었습니다";
}
rttr.addFlashAttribute("message", message);
return url;
}
/* 일정정보 출력 */
@RequestMapping(value = "/schedule_show", method = RequestMethod.GET)
public String schedule_show(Model model,HttpServletRequest request, @RequestParam("schedule_idx") int idx, RedirectAttributes rttr) {
ScheduleDao scheduleDao = sqlSession.getMapper(ScheduleDao.class);
scheduleDao.get(idx);
model.addAttribute("schedule_show",scheduleDao.get(idx));
return null;
}
/* 일정정보 수정 */
@RequestMapping(value = "modify.do", method = RequestMethod.GET)
public String schedule_modify(Model model,HttpServletRequest request, ScheduleDto scheduleDto, RedirectAttributes rttr) {
ScheduleDao scheduleDao = sqlSession.getMapper(ScheduleDao.class);
scheduleDao.update(scheduleDto);
model.addAttribute("schedule_modify",scheduleDao.update(scheduleDto));
return "/modify";
}
/* 일정정보 삭제 */
@RequestMapping(value = "/delete", method = RequestMethod.GET)
public String schedule_delete(Model model,HttpServletRequest request, ScheduleDto scheduleDto, RedirectAttributes rttr) {
ScheduleDao scheduleDao = sqlSession.getMapper(ScheduleDao.class);
scheduleDao.delete(scheduleDto);
model.addAttribute("schedule_delete",scheduleDao.delete(scheduleDto));
return null;
}
}
controller에서 일정 수정, 삭제 관련코드
/* 일정정보 수정 */
@RequestMapping(value = "modify.do", method = RequestMethod.GET)
public String schedule_modify(Model model,HttpServletRequest request, ScheduleDto scheduleDto, RedirectAttributes rttr) {
ScheduleDao scheduleDao = sqlSession.getMapper(ScheduleDao.class);
scheduleDao.update(scheduleDto);
model.addAttribute("schedule_modify",scheduleDao.update(scheduleDto));
return "/modify";
}
/* 일정정보 삭제 */
@RequestMapping(value = "/delete", method = RequestMethod.GET)
public String schedule_delete(Model model,HttpServletRequest request, ScheduleDto scheduleDto, RedirectAttributes rttr) {
ScheduleDao scheduleDao = sqlSession.getMapper(ScheduleDao.class);
scheduleDao.delete(scheduleDto);
model.addAttribute("schedule_delete",scheduleDao.delete(scheduleDto));
return null;
}
<ScheduleDao.java>
package org.zerock.dao;
import java.util.ArrayList;
import java.util.List;
import org.apache.ibatis.annotations.Select;
import org.zerock.data.DateData;
import org.zerock.dto.ScheduleDto;
public interface ScheduleDao {
public int schedule_add(ScheduleDto scheduleDto);
public int before_schedule_add_search(ScheduleDto scheduleDto);
public ArrayList<ScheduleDto> schedule_list(DateData dateData);
/* 수정, 삭제를 위한 리스트 불러오기 */
/* 조회하기 */
public ScheduleDto get(int idx);
/* 수정하기 */
public int update(ScheduleDto scheduleDto);
/* 삭제하기 */
public int delete(ScheduleDto scheduleDto);
}
위의 코드에서 일정 수정, 삭제 관련코드
/* 수정하기 */
public int update(ScheduleDto scheduleDto);
/* 삭제하기 */
public int delete(ScheduleDto scheduleDto);
<ScheduleDao.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="org.zerock.dao.ScheduleDao">
<insert id="schedule_add">
insert into schedule
<include refid="schedule_cols" />
values
(nextval(schedule_sq), #{schedule_num}, #{schedule_subject}, #{schedule_desc}, #{schedule_date}, #{schedule_share}, #{schedule_mycolor})
</insert>
<sql id="schedule_cols">
(schedule_idx, schedule_num, schedule_subject, schedule_desc, schedule_date, schedule_share, schedule_mycolor)
</sql>
<select id="before_schedule_add_search" resultType="int">
select count(*) from schedule where schedule_date = #{schedule_date}
</select>
<select id="schedule_list" resultType="org.zerock.dto.ScheduleDto">
select * from schedule where schedule_date >= #{db_startDate} and schedule_date <= #{db_endDate}
order by schedule_date, schedule_num, schedule_idx
</select>
<!-- 리스트 가져오기 -->
<select id="get" resultType="org.zerock.dto.ScheduleDto">
<![CDATA[
select * from schedule where schedule_idx = #{schedule_idx}
]]>
</select>
<!-- 수정하기 -->
<update id="update">
update schedule
set schedule_num = #{schedule_num},
schedule_subject = #{schedule_subject},
schedule_desc = #{schedule_desc},
schedule_date=#{schedule_date},
schedule_share =#{schedule_share},
schedule_mycolor=#{schedule_mycolor}
where schedule_idx=#{schedule_idx}
</update>
<delete id="delete">
delete from schedule where schedule_idx=#{schedule_idx}
</delete>
</mapper>
xml에서 일정 수정, 삭제 관련코드
<!-- 수정하기 -->
<update id="update">
update schedule
set schedule_num = #{schedule_num},
schedule_subject = #{schedule_subject},
schedule_desc = #{schedule_desc},
schedule_date=#{schedule_date},
schedule_share =#{schedule_share},
schedule_mycolor=#{schedule_mycolor}
where schedule_idx=#{schedule_idx}
</update>
<delete id="delete">
delete from schedule where schedule_idx=#{schedule_idx}
</delete>
<modify.jsp>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<script>
window.close();
</script>
</body>
</html>
<delete.jsp>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<script>
window.close();
</script>
</body>
</html>
<수정>
1. 수정버튼을 클릭하면 controller에 modify.do 코드 메소드를 실행
2. dao에 update()메소드를 실행하는데 dto를 매개변수로 정보 전달
3. xml에 sql문으로 update문 실행하여 db 정보 업데이트
4. modify.jsp에 window.close()로 창 닫기
<삭제>
1. 삭제버튼을 클릭하면 controller에 /delete 코드 메소드를 실행
2. dao에 delete()메소드를 실행하는데 dto를 매개변수로 정보 전달
3. xml에 sql문으로 delete문 실행하여 db 정보 삭제
4. delete.jsp에 window.close()로 창 닫기
--> 결과화면
728x90
'코딩 연습장 > Spring' 카테고리의 다른 글
Spring 공유 캘린더 프로젝트 - 8 (캘린더 일정 조회) (0) | 2021.06.28 |
---|---|
Spring 공유 캘린더 프로젝트 - 7 (캘린더 일정 추가) (0) | 2021.06.28 |
Spring 공유 캘린더 프로젝트 - 6 (캘린더 화면) (0) | 2021.06.25 |
Spring 공유 캘린더 프로젝트 - 5 (메인 화면) (0) | 2021.06.24 |
Spring 공유 캘린더 프로젝트 - 4 (비밀 번호 찾기) (0) | 2021.06.24 |