SpringBoot MyBatis 게시판 개인 과제

stan·2023년 10월 6일
0

Spring

목록 보기
22/22

BoardDAO

package com.kim.app;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

public class BoardDAO{

	@Autowired
	private JdbcTemplate jdbcTemplate;// 의존관계 (멤버변수)

	// 응집도를 높여줌
	private final String SELECTALL="SELECT * FROM BOARD";
	private final String SELECTONE="SELECT * FROM BOARD WHERE BID=?";
	private final String INSERT="INSERT INTO BOARD (BID,CONTENT,MID) VALUES(?,?,?)";
	private final String UPDATE="UPDATE BOARD SET CONTENT=? WHERE BID=?";
	private final String DELETE="DELETE FROM BOARD WHERE BID=?";


	public List<BoardDTO> selectAll(BoardDTO bDTO) {
		// 반복적인 로직을 대신 수행하는 "템플릿 패턴"을 활용
		System.out.println("Board selectAll 로그");
		return jdbcTemplate.query(SELECTALL, new BeanPropertyRowMapper<BoardDTO>(BoardDTO.class)); //아웃풋이 리스트로 나옴
	}
	public BoardDTO selectOne(BoardDTO bDTO) {
		System.out.println("Board selectOne 로그");
		Object[] args = { bDTO.getBid() };
		try {
			return jdbcTemplate.queryForObject(SELECTONE,args ,new BeanPropertyRowMapper<BoardDTO>(BoardDTO.class));
		}
		catch(Exception e) {
			return null;
		}
	}
	public boolean insert(BoardDTO bDTO) {
		System.out.println("Board insert 로그");
		int rs = jdbcTemplate.update(INSERT,bDTO.getBid(),bDTO.getContent(),bDTO.getMid());

		if(rs<=0) {
			return false;
		}
		return true;
	}
	public boolean update(BoardDTO bDTO) {
		System.out.println("Board update 로그");
		int rs = jdbcTemplate.update(UPDATE,bDTO.getContent(),bDTO.getBid());
		if(rs<=0) {
			return false;
		}
		return true;
	}
	public boolean delete(BoardDTO bDTO) {
		System.out.println("Board delete 로그");
		int rs = jdbcTemplate.update(DELETE,bDTO.getBid());
		if(rs<=0) {
			return false;
		}
		return true;
	}


}

BoardDTO

package com.kim.app;

import lombok.Data;

@Data //롬복; 게터세터 자동 생성
public class BoardDTO {//VO
	private int bid; //PK
	private String mid; //FK
	private String content;//글내용
	
}

BoardService

package com.kim.app;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

@Service //메모리 적재
public class BoardService implements InterfaceBoardService {
	
	@Autowired//의존주입
	private InterfaceBoardDAO bDAO;
	
	@Override
	public List<BoardDTO> selectAll(BoardDTO bDTO) {
		return bDAO.selectAll(bDTO);
	}

	@Override
	public BoardDTO selectOne(BoardDTO bDTO) {
		return bDAO.selectOne(bDTO.getBid());
	}

	@Override
	public boolean insert(BoardDTO bDTO) {
		Map<String, String> map = new HashMap<String, String>();
		map.put("BID", Integer.toString(bDTO.getBid()));
		map.put("CONTENT", bDTO.getContent());
		map.put("MID", bDTO.getMid());
		return bDAO.insert(map);
	}

	@Override
	public boolean update(BoardDTO bDTO) {
		Map<String, String> map = new HashMap<String, String>();
		map.put("CONTENT", bDTO.getContent());
		map.put("BID", Integer.toString(bDTO.getBid()));
		return bDAO.update(map);
	}

	@Override
	public boolean delete(BoardDTO bDTO) {
		return bDAO.delete(bDTO.getBid());
	}

}

InterfaceBoardDAO

package com.kim.app;

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

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

@Mapper
public interface InterfaceBoardDAO {
	public List<BoardDTO> selectAll(BoardDTO bDTO);
	public BoardDTO selectOne(int bid);
	public boolean insert(Map<String, String> map);
	public boolean update(Map<String, String> map);
	public boolean delete(@Param("BID")int bid);
}

InterfaceBoardService

package com.kim.app;

import java.util.List;

public interface InterfaceBoardService {
	//public abstract은 기본디폴트 걍 생략
	List<BoardDTO> selectAll(BoardDTO bDTO);
	BoardDTO selectOne(BoardDTO bDTO);
	boolean insert(BoardDTO bDTO);
	boolean update(BoardDTO bDTO);
	boolean delete(BoardDTO bDTO);
}

MemberDAO


package com.kim.app;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

public class MemberDAO {
	
	@Autowired
	private JdbcTemplate jdbcTemplate;// 의존관계 (멤버변수)
	
	// 응집도를 높여줌
	private final String SELECTALL="SELECT * FROM MEMBER";
	private final String SELECTONE="SELECT * FROM MEMBER WHERE MID=? AND MPW=?";//아이디, 비번 둘다 이용해서 selectOne으로 회원 정보 가져오기
	private final String SELECTONE_DUPLICATE = "SELECT * FROM MEMBER WHERE MID = ?"; //아디디로만 selectOne에서 회원정보 가져오기
	private final String INSERT="INSERT INTO MEMBER (MID, MPW) VALUES (?, ?)";
	private final String UPDATE="UPDATE MEMBER SET MPW=? WHERE MID=?";
	private final String DELETE="DELETE FROM MEMBER WHERE MID=?";
	
	public List<MemberDTO> selectAll(MemberDTO mDTO) {
		// 반복적인 로직을 대신 수행하는 "템플릿 패턴"을 활용
		System.out.println("Member selectAll 로그");
		return jdbcTemplate.query(SELECTALL, new BeanPropertyRowMapper<MemberDTO>(MemberDTO.class)); //아웃풋이 리스트로 나옴
	}
	public MemberDTO selectOne(MemberDTO mDTO) {
		System.out.println("Member selectOne 로그");
		try {
			if(mDTO.getSc()==null) {
				Object[] args = { mDTO.getMid(), mDTO.getMpw() };
				return jdbcTemplate.queryForObject(SELECTONE, new BeanPropertyRowMapper<MemberDTO>(MemberDTO.class), args);
			}
			else if(mDTO.getSc().equals("duplicate")) {//아이디 중복 검사용
				Object[] args = { mDTO.getMid() };
				return jdbcTemplate.queryForObject(SELECTONE_DUPLICATE, new BeanPropertyRowMapper<MemberDTO>(MemberDTO.class), args);
			}
		} catch(EmptyResultDataAccessException e) {
			return null;
		}
		return null;
	}
	public boolean insert(MemberDTO mDTO) {
		System.out.println("Member insert 로그");
		int rs = jdbcTemplate.update(INSERT, mDTO.getMid(), mDTO.getMpw());
		if(rs<=0) {
			return false;
		}
		return true;
	}
	public boolean update(MemberDTO mDTO) {
		System.out.println("Member update 로그");
		int rs = jdbcTemplate.update(UPDATE, mDTO.getMpw(), mDTO.getMid());
		if(rs<=0) {
			return false;
		}
		return true;
	}
	public boolean delete(MemberDTO mDTO) {
		System.out.println("Member delete 로그");
		int rs = jdbcTemplate.update(DELETE, mDTO.getMid());
		if(rs<=0) {
			return false;
		}
		return true;
	}
}

MemberDTO

package com.kim.app;

import lombok.Data;

@Data
public class MemberDTO { //VO
	private String mid; //PK회원아이디
	private String mpw;//회원비번
	private String sc;//서치컨디션
}

MemberService

package com.kim.app;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

@Service //컨트롤러한테 꽃혀야 함; Component를 상속받은 Service
public class MemberService implements InterfaceMemberService {
	
	@Autowired
	private InterfaceMemberDAO mDAO;
	
	@Override
	public List<MemberDTO> selectAll(MemberDTO mDTO) {
		return mDAO.selectAll(mDTO);
	}

	@Override
	public MemberDTO selectOne(MemberDTO mDTO) {
		Map<String, String> map = new HashMap<String, String>();
		map.put("MID", mDTO.getMid());
		map.put("MPW", mDTO.getMpw());
		map.put("sc", mDTO.getSc());
		return mDAO.selectOne(map);
	}

	@Override
	public boolean insert(MemberDTO mDTO) {
		Map<String, String> map = new HashMap<String, String>();
		map.put("MID", mDTO.getMid());
		map.put("MPW", mDTO.getMpw());
		return mDAO.insert(map);
	}

	@Override
	public boolean update(MemberDTO mDTO) {
		Map<String, String> map = new HashMap<String, String>();
		map.put("MID", mDTO.getMid());
		map.put("MPW", mDTO.getMpw());
		return mDAO.update(map);
	}

	@Override
	public boolean delete(MemberDTO mDTO) {
		return mDAO.delete(mDTO.getMid());
	}
}

InterfaceMemberDAO

package com.kim.app;

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

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

@Mapper
public interface InterfaceMemberDAO {
	public List<MemberDTO> selectAll(MemberDTO mDTO);
	public MemberDTO selectOne(Map<String, String> map);
	public boolean insert(Map<String, String> map);
	public boolean update(Map<String, String> map);
	public boolean delete(@Param("MID")String mid);
}

InterfaceMemberService

package com.kim.app;

import java.util.List;

public interface InterfaceMemberService {
	public List<MemberDTO> selectAll(MemberDTO mDTO);
	public MemberDTO selectOne(MemberDTO mDTO);
	public boolean insert(MemberDTO mDTO);
	public boolean update(MemberDTO mDTO);
	public boolean delete(MemberDTO mDTO);
}

Controller

package com.kim.app;

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

import jakarta.servlet.http.HttpSession;

@Controller//메모리적제
public class CTRL {

	@Autowired//Board서비스레이어의존주입
	private InterfaceBoardService boardService;

	@Autowired//Member서비스레이어의존주입
	private InterfaceMemberService memberService;

	@RequestMapping("/")//프로젝트실행
	public String root() {
		return "redirect:/main";
	}

	@RequestMapping("/main") //메인페이지로
	public String main(BoardDTO bDTO, Model model) {
		System.out.println("main로그");
		model.addAttribute("datas", boardService.selectAll(bDTO));
		return "main";
	}

	// ==================멤버=====================
	//CRUD 성공시 model객체를 이용해 메세지 설정 후 success (성공) 혹은 error(실패) jsp페이지를 통해 
	//alert창으로 사용자에게 메세지 보여줌 
	@RequestMapping("/login")//로그인액션
	public String login(MemberDTO mDTO, Model model, HttpSession session) {
		System.out.println("login로그");
		System.out.println("mDTO로그 : "+ mDTO);
		mDTO = memberService.selectOne(mDTO); //selectOne메서드수행
		if(mDTO != null) {//성공시
			session.setAttribute("member", mDTO.getMid());//세션에아이디저장
		}
		else {
			model.addAttribute("message", "incorrect");
			return "error"; //로그인 실패시 에러페이지로
		}
		return "redirect:/main";//로그인 성공시메인페이지로
	}

	@RequestMapping("/logout")//로그아웃액션
	public String logout(HttpSession session) {
		System.out.println("logout로그");
		session.removeAttribute("member");//세션에서 삭제
		return "redirect:/main";//로그아웃후 메인페이지로
	}

	@RequestMapping(value = "/signupPage", method = RequestMethod.GET)
	public String signupPage() {//회원가입페이지로가기액션
		System.out.println("signupPage로그");
		return "join";//회원가입페이지
	}

	@RequestMapping(value = "/signup", method = RequestMethod.POST)//회원가입 액션
	public String signup(MemberDTO mDTO, Model model) {
		System.out.println("signup로그");
		System.out.println("mDTO로그 : " + mDTO);
		mDTO.setSc("duplicate"); //MemberDTO의 멤버변수인 서치컨디션을 중복아이디 확인용으로 설정
		MemberDTO mdata = memberService.selectOne(mDTO);
		if (mdata == null) { //기존에 없는 아이디라면
			memberService.insert(mDTO);//insert메서드로 새로운 회원 추가
			System.out.println("singup로그 : 회원가입성공");
			model.addAttribute("message", "joined");
			return "success";//성공메세지페이지로
		} else {//기존에 있던 아이디라면 아이디 중복이기 때문에 회원가입 실패
			System.out.println("singup로그 : 중복된아이디");
			model.addAttribute("message", "duplicate");
			return "error"; //회원가입 실패시 에러페이지로
		}
	}
	@RequestMapping("/check")//비밀번호 확인 페이지로
	public String checkPage() {
		System.out.println("check로그");
		return "check";//체크페이지로
	}
	
	@RequestMapping("/mypage")//마이페이지액션
	public String mypage( MemberDTO mDTO, Model model, HttpSession session) {
		System.out.println("mypage로그");
		System.out.println("mDTO로그 : "+ mDTO);
		
		mDTO.setMid((String)session.getAttribute("member"));//세션에 저장된 현재 로그인 회원아이디값을 불러와서 세팅
		
		mDTO = memberService.selectOne(mDTO);//selectOne으로 그 값(아이디)와 입력된 비밀번호로 회원 정보 불러오기
		if(mDTO == null) {//만약 null이라면 회원정보(아이디와 비번) 불일치 == 비밀번호 재입력 실패
			model.addAttribute("message", "incorrectPw");
			return "error";//에러 페이지로
		}
		model.addAttribute("data", mDTO);//성공 했다면 모델에 저장
		return "mypage";//마이페이지로 
	}

	@RequestMapping("/updateMember")//회원정보변경액션
	public String updateMember( MemberDTO mDTO, HttpSession session, Model model) {
		System.out.println("updateMember로그");
		mDTO.setMid((String)session.getAttribute("member"));//session에 저장된 현재 로그인한 회원의 아이디를 세팅 
		System.out.println("mDTO로그 : "+ mDTO);
		if(memberService.update(mDTO)) {//새로 입력받은 비밀번호로 update메서드 수행 성공시
			System.out.println("updateMember로그 : 회원정보변경 성공");
			session.removeAttribute("member");//세션에서 제거 해서 로그아웃
			model.addAttribute("message","changedMember");
			return "success";
		}
		else {
			System.out.println("updateMember로그 : 회원정보변경 실패");
			model.addAttribute("message", "memberChangeFail");
			return "error"; //update실패시 에러페이지로
		}
	}

	@RequestMapping("/deleteMember")//회원정보 삭제 액션
	public String deleteMember( MemberDTO mDTO, HttpSession session, Model model) {
		System.out.println("deleteMember로그");
		mDTO.setMid((String)session.getAttribute("member"));//session에 저장된 현재 로그인한 회원의 아이디를 세팅 
		if(memberService.delete(mDTO)) {//삭제수행 성공시
			System.out.println("deleteMember로그 : 회원탈퇴성공");
			session.removeAttribute("member");//세션에서 제거로 로그아웃
			return "redirect:/main";//메인으로
		}
		else {
			System.out.println("deleteMember로그 : 회원탈퇴실패");
			model.addAttribute("message","deleteMemberFail");
			return "error";//삭제 실패시 에러페이지로
		}


	}
	//================게시판 글=====================
	//CRUD 성공시 model객체를 이용해 메세지 설정 후 success (성공) 혹은 error(실패) jsp페이지를 통해 
	//alert창으로 사용자에게 메세지 보여줌 
	@RequestMapping("/board")//게시글 선택 액션 
	public String selectBoard(BoardDTO bDTO, Model model) {
		System.out.println("board로그");
		model.addAttribute("data",boardService.selectOne(bDTO));//게시글 1개 정보 불러오기
		return "board";//보드페이지로
	}

	@RequestMapping(value = "/insertBoard")//게시글 추가 
	public String insertBoard(BoardDTO bDTO,HttpSession session, Model model) {
		System.out.println("bDTO 로그 : " +bDTO);
		bDTO.setMid((String)session.getAttribute("member"));//보드DTO에 로그인한 회원정보 아이디로 세팅 
		if(boardService.insert(bDTO)) {//로그인한 회원정보로 새로운 게시글 추가 insert 메서드 수행
			System.out.println("insertBoard로그: 게시글 작성 성공");
			return "redirect:/main"; //성공시 메인으로
		}
		else {
			System.out.println("insertBoard로그: 게시글 작성 실패");
			model.addAttribute("message","postBoardFail");
			return "error";//게시글 추가 실패시 에러페이지로 
		}
	}

	@RequestMapping("/updateBoard")//게시글 변경
	public String updateBoard(BoardDTO bDTO, Model model) {
		//커맨드객체 bDTO로 게시글 정보 가져오기 
		if (boardService.update(bDTO)) {//게시글 변경 성공시
			System.out.println("updateBoard로그: 게시글 변경 성공");
			model.addAttribute("message","changedBoard");
			return "success";//성공 페이지로 
		}
		else {
			System.out.println("updateBoard로그: 게시글 변경 실패");
			model.addAttribute("message","boardChangeFail");
			return "error";//게시글 update실패시 에러페이지로
		}
	}

	@RequestMapping("/deleteBoard")//게시글 삭제 액션
	public String deleteBoard(BoardDTO bDTO, Model model) {
		//커맨드객체 bDTO로 게시글 정보 가져오기 
		System.out.println("deleteBoard로그");
		if(boardService.delete(bDTO)) {//게시글 삭제 성공시
			System.out.println("deleteBoard로그 : 게시글 삭제 성공");
			return "redirect:/main";//다시 메인으로 
		}
		else {//삭제 실패시 
			System.out.println("deleteBoard로그 : 게시글 삭제 실패");
			model.addAttribute("message","deleteBoardFail");
			return "error";//에러페이지로
		}
	}
}

profile
이진 입니다

0개의 댓글