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);
}
}
}