BoardController.java

팡태(❁´◡`❁)·2022년 3월 15일
0

java

목록 보기
30/36
package com.example.controller;

import java.util.Date;
import java.util.List;
import java.util.Map;

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

import com.example.entity.Board;
import com.example.repository.BoardRepository;
import com.example.service.SequenceService;

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.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import org.springframework.web.servlet.support.RequestContextUtils;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
@RequestMapping(value = "/board")
public class BoardController {

    // 서비스 => mybatis, 저장소 => jpa
    @Autowired
    BoardRepository bRepository;

    @Autowired
    private SequenceService sequenceService;

    @Autowired
    HttpSession httpSession;

    @GetMapping(value = "/insert")
    public String insertGET() {
        return "/board/insert";
    }

    @PostMapping(value = "/insert")
    public String insertPOST(
            Model model,
            @ModelAttribute Board board) {
        System.out.println(board.toString());

        board.setNo(sequenceService.generatorSequence("SEQ_BOARD4_NO"));
        board.setRegdate(new Date());

        Board retBoard = bRepository.save(board);

        if (retBoard != null) {
            model.addAttribute("msg", "글쓰기 완료");
            model.addAttribute("url", "/board/selectlist");
            return "alert";
        }
        return "redirect:/board/insert";
    }

    @GetMapping(value = "/selectlist")
    public String selectGET(Model model) {

        List<Board> list = bRepository.findAll();

        model.addAttribute("list", list);
        return "board/selectlist";
    }

    @GetMapping(value = "/selectfind")
    public String selectfindGET(Model model,
            @RequestParam(name = "text", defaultValue = "", required = false) String text,
            @RequestParam(name = "type", defaultValue = "", required = false) String type,

            @RequestParam(name = "type1", defaultValue = "0", required = false) String type1,
            @RequestParam(name = "hit", defaultValue = "0", required = false) long hit1,

            @RequestParam(name = "type2", defaultValue = "0", required = false) String type2,
            @RequestParam(name = "no", defaultValue = "0", required = false) List<Long> no) {

        List<Board> list = null;
        // 1---------------------------
        if (type.equals("title")) {
            list = bRepository.findByTitle(text);
        } else if (type.equals("writer")) {
            list = bRepository.findByWriter(text);
        } else if (type.equals("hit")) {
            long hit = 0L;
            try {
                // 문자로 되어 있는 숫자를 숫자형으로변경
                // "1234" => 1234
                // "" => X
                hit = Long.parseLong(text);
            } catch (Exception e) {
                hit = 0L;
            }
            list = bRepository.findByHit(hit);
        }

        if (text.length() == 0) {
            list = bRepository.findAll();
        }

        // 2----------------------------
        if (type1.equals("1")) { // 이상
            list = bRepository.findByHitGreaterThanEqual(hit1);
        } else if (type1.equals("2")) { // 미만
            list = bRepository.findByHitLessThan(hit1);
        }

        // 3----------------------------
        System.out.println("---------------------");
        System.out.println(type2);
        System.out.println(no.get(0));

        if (type2.equals("1")) { // 포함
            list = bRepository.findByNoIn(no);
        } else if (type2.equals("2")) { // 포함X
            list = bRepository.findByNoNotIn(no);
        }

        model.addAttribute("list", list);
        return "board/selectfind";
    }

    @PostMapping(value = "/action")
    public String actionPOST(Model model,
            RedirectAttributes redirectAttributes,
            @RequestParam(name = "btn") String btn,
            @RequestParam(name = "rad") long no) {

        try {
            System.out.println(btn);
            System.out.println(no);

            // == => 비교가능 int long, char
            // equals => String(문자열은 안됨)
            if (btn.equals("1개 삭제")) {
                bRepository.deleteById(no);
                model.addAttribute("msg", "삭제 되었습니다.");
                model.addAttribute("url", "/board/selectlist");
                return "alert"; // 알림창 띄우고 url변경 자동화
            } else if (btn.equals("1개 수정")) {
                // GET방식 url에 parameter로 붙임
                redirectAttributes.addAttribute("no", no);

                // POST방식 1번만 전송 새로고침시 데이터는 소멸
                // 세션에 추가하는 방식
                redirectAttributes.addFlashAttribute("no1", no);

                return "redirect:/board/updatebatch";
            }
            return "redirect:/board/selectlist";
        } catch (Exception e) {
            e.printStackTrace();
            return "redirect:/home";
        }
    }

    @GetMapping(value = "/updatebatch")
    public String updateGET(
            Model model,
            HttpServletRequest request,
            @RequestParam(name = "no") long no) {
        Map<String, ?> map = RequestContextUtils.getInputFlashMap(request);
        if (map != null) {
            long no1 = (long) map.get("no1");
            System.out.println("no1: " + no1);
        }
        // null에 대한 처리
        Board board = bRepository.findById(no).orElse(null);
        model.addAttribute("board", board);
        return "board/updatebatch";
    }

    @PostMapping(value = "/updatebatch")
    public String updatePOST(
            Model model,
            @ModelAttribute Board board) {
        try {
            // 추가 => 기본키를 다르게 해서 저장
            // 수정 => 기본키에 해당하는 글 번호를 동일하게 해서 저장

            // 기존 내용을 읽음
            Board board1 = bRepository.findById(board.getNo()).orElse(null);

            // 변경할 항목만 다시 저장
            board1.setTitle(board.getTitle());
            board1.setContent(board.getContent());
            board1.setWriter(board.getWriter());

            // 최종 board1의 값을 저장
            bRepository.save(board1);

            model.addAttribute("msg", "수정 완료");
            model.addAttribute("url", "/board/selectlist");
            return "alert";
        } catch (Exception e) {
            e.printStackTrace();
            return "redirect:/board/selectlist";
        }
    }

}

0개의 댓글