Spring/Spring

day62) Spring - Model 설계

code_learner 2022. 3. 30. 16:57

[기본적인 게시판 CRUD를 활용한 Spring Framework 모델구조 만들기]

-com.test.app.board 패키지에서는 객체화 되어 사용되지 않는 클래스 

:BoardService(interface), BoardVO

 

-com.test.app.board.impl 패키지에서는 객체화 되어 사용되는 클래스를 넣는다.

:BoardDAO, BoardServiceImpl

 

[applicationContext.xml]

컨테이너에서 어노테이션을 탐색하기 위해 사용

<context:component-scan base-package="com.test.app" />

 

[BoardVO]

더보기
package com.test.app.board;

public class BoardVO {
   private int bid;
   private String title;
   private String writer;
   private String content;
   public int getBid() {
      return bid;
   }
   public void setBid(int bid) {
      this.bid = bid;
   }
   public String getTitle() {
      return title;
   }
   public void setTitle(String title) {
      this.title = title;
   }
   public String getWriter() {
      return writer;
   }
   public void setWriter(String writer) {
      this.writer = writer;
   }
   public String getContent() {
      return content;
   }
   public void setContent(String content) {
      this.content = content;
   }
   @Override
   public String toString() {
      return "BoardVO [bid=" + bid + ", title=" + title + ", writer=" + writer + ", content=" + content + "]";
   }
}

 

[BoardService]

-interface로서 메서드를 강제시키기 위해

더보기
package com.test.app.board;

import java.util.List;

public interface BoardService {//DAO를 이용할 친구 Watch, Remote역할
   public void insertBoard(BoardVO vo);
   public BoardVO getBoard(BoardVO vo);
   public List<BoardVO> getBoardList(BoardVO vo);
   public void updateBoard(BoardVO vo);
   public void deleteBoard(BoardVO vo);
}

 

 

[BoardServiceInpl]

-DAO의 메서드가 수행되도록 만든다  ex)TV-리모콘에서 TV의 역할

더보기
package com.test.app.board.impl;

import java.util.List;

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

import com.test.app.board.BoardService;
import com.test.app.board.BoardVO;

@Service("boardService") //Shape: Circle, Rect, Tri,.... @Component: @Service,@Repository...
public class BoardServiceImpl implements BoardService {

	@Autowired //DI 의존성 주입
	private BoardDAO boardDAO;

	@Override
	public void insertBoard(BoardVO vo) {
		boardDAO.insertBoard(vo);
	}

	@Override
	public BoardVO getBoard(BoardVO vo) {
		return boardDAO.getBoard(vo);
	}

	@Override
	public List<BoardVO> getBoardList(BoardVO vo) {
		return boardDAO.getBoardList(vo);
	}

	@Override
	public void updateBoard(BoardVO vo) {
		boardDAO.updateBoard(vo);
	}

	@Override
	public void deleteBoard(BoardVO vo) {
		boardDAO.deleteBoard(vo);
	}

}

 

[BoardDAO]

실제 수행을 담당한다 ex)리모콘의 역할

+)JDBCUtil은 따로 만들어야 한다.

더보기
package com.test.app.board.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Repository;

import com.test.app.board.BoardVO;
import com.test.app.common.JDBCUtil;

@Repository("boardDAO")//DB와 관련된 component
public class BoardDAO {//진짜 역할(리모콘, watch역할)
   private Connection conn=null;
   private PreparedStatement pstmt=null;
   private ResultSet rs=null;
   private final String BOARD_INSERT="insert into board values((select nvl(max(bid),0)+1 from board),?,?,?)";
   private final String BOARD_SELECTONE="select * from board where bid=?";
   private final String BOARD_SELECTALL="select * from board order by bid desc";
   private final String BOARD_UPDATE="update board set title=?,content=? where bid=?";
   private final String BOARD_DELETE="delete board where bid=?";
   public void insertBoard(BoardVO vo) {
      conn=JDBCUtil.connect();
      try {
         pstmt=conn.prepareStatement(BOARD_INSERT);
         pstmt.setString(1, vo.getTitle());
         pstmt.setString(2, vo.getWriter());
         pstmt.setString(3, vo.getContent());
         pstmt.executeUpdate();
      } catch (SQLException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      } finally {
         JDBCUtil.disconnect(pstmt, conn);
      }
   }
   public BoardVO getBoard(BoardVO vo) {
      BoardVO data=null;
      conn=JDBCUtil.connect();
      try {
         pstmt=conn.prepareStatement(BOARD_SELECTONE);
         pstmt.setInt(1, vo.getBid());
         rs=pstmt.executeQuery();
         if(rs.next()) {
            data=new BoardVO();
            data.setBid(rs.getInt("bid"));
            data.setContent(rs.getString("content"));
            data.setTitle(rs.getString("title"));
            data.setWriter(rs.getString("writer"));
         }
         rs.close();
      } catch (SQLException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      } finally {
         JDBCUtil.disconnect(pstmt, conn);
      }
      return data;
   }
   public List<BoardVO> getBoardList(BoardVO vo) {
      List<BoardVO> datas=new ArrayList<BoardVO>();
      conn=JDBCUtil.connect();
      try {
         pstmt=conn.prepareStatement(BOARD_SELECTALL);
         rs=pstmt.executeQuery();
         while(rs.next()) {
            BoardVO data=new BoardVO();
            data.setBid(rs.getInt("bid"));
            data.setContent(rs.getString("content"));
            data.setTitle(rs.getString("title"));
            data.setWriter(rs.getString("writer"));
            datas.add(data);
         }
         rs.close();
      } catch (SQLException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      } finally {
         JDBCUtil.disconnect(pstmt, conn);
      }
      return datas;
   }
   public void updateBoard(BoardVO vo) {
      conn=JDBCUtil.connect();
      try {
         pstmt=conn.prepareStatement(BOARD_UPDATE);
         pstmt.setString(1, vo.getTitle());
         pstmt.setString(2, vo.getContent());
         pstmt.setInt(3, vo.getBid());
         pstmt.executeUpdate();
      } catch (SQLException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      } finally {
         JDBCUtil.disconnect(pstmt, conn);
      }
   }
   public void deleteBoard(BoardVO vo) {
      conn=JDBCUtil.connect();
      try {
         pstmt=conn.prepareStatement(BOARD_DELETE);
         pstmt.setInt(1, vo.getBid());
         pstmt.executeUpdate();
      } catch (SQLException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      } finally {
         JDBCUtil.disconnect(pstmt, conn);
      }
   }
}