common - jdbcUtil.java - dto - boarddto - userdto - boardservice - boardserviceimpl - boardao - boardservicetest
package com.mycompany.myapp.service;
import java.util.List;
import com.mycompany.myapp.dto.BoardDTO;
public interface BoardService {
//글등록
void insertBoard(BoardDTO boardDTO);
//글수정
void updateBoard(BoardDTO boardDTO);
//글삭제
void deleteBoard(int boardNo);
//글 상세 조회
BoardDTO getBoard(int boardNo);
// 글 목록 조회
//List<BoardDTO> 여러 게시글을 담고있는 List
List<BoardDTO> getBoardList();
}
package com.mycompany.myapp.service;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import com.mycompany.myapp.dto.BoardDTO;
public class BoardServiceTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//1. 스프링 컨테이너 구동
AbstractApplicationContext factory = new GenericXmlApplicationContext("root-context.xml");
//2. BoardService변수의 의존성 검색과 의존성 주입
BoardService boardService = (BoardService) factory.getBean("boardService");
//3. 글 등록 테스트.
BoardDTO boardDTO = new BoardDTO();
boardDTO.setBoardTitle("테스트 제목");
boardDTO.setBoardContent("Test 내용입니다.");
boardDTO.setBoardWriter("관리자");
boardService.insertBoard(boardDTO);
//4. 글상세 조회 테스트
BoardDTO returnBoard = boardService.getBoard(1);
System.out.println(returnBoard);
//4, 스프링 컨테이너 종료
factory.close();
}
}
package com.mycompany.myapp.service.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.List;
import org.springframework.stereotype.Repository;
import com.mycompany.myapp.common.JDBCUtil;
import com.mycompany.myapp.dto.BoardDTO;
//DAO(Data Access Object): DB에 직접 접근하는 객체
// => Boot에서는 Mapper 인터페이스나 Repository 인터페이스 사용
@Repository("boardDAO")
public class BoardDAO {
//JDBC 관련 변수
private Connection conn = null;
private PreparedStatement stmt = null;
private ResultSet rs = null;
//쿼리등록
private final String INSERT_BOARD = "INSERT INTO T_BOARD ("
+ " BOARD_TITLE, "
+ " BOARD_CONTENT, "
+ " BOARD_WRITER"
+ " ) VALUES ("
+ " ?,"
+ " ?,"
+ " ?"
+ " )";
private final String GET_BOARD = "SELECT "
+ " BOARD_NO"
+ " , BOARD_TITLE"
+ " , BOARD_CONTENT"
+ " , BOARD_WRITER"
+ " , BOARD_REGDATE"
+ " , BOARD_CNT"
+ " FROM T_BOARD"
+ " WHERE BOARD_NO = ?";
//글 등록
public void insertBoard(BoardDTO boardDTO) {
System.out.println("insertBoard 실행");
try {
//DB Connection 객체 얻기
conn = JDBCUtil.getConnection();
//실행될 쿼리문 stmt에 담기
stmt = conn.prepareStatement(INSERT_BOARD);
//쿼리문 실행될 때 넘길 파라미터 셋팅
stmt.setString(1, boardDTO.getBoardTitle());
stmt.setString(2, boardDTO.getBoardContent());
stmt.setString(3, boardDTO.getBoardWriter());
//쿼리문 실행
//insert, delete, update는 executeUpadte 사용
//select는 executeQuery 사용
stmt.executeUpdate();
} catch(Exception e) {
System.out.println(e.getMessage());
} finally {
JDBCUtil.close(stmt, conn);
}
}
//글 수정
public void updateBoard(BoardDTO boardDTO) {
}
//글 삭제
public void deleteBoard(int boardNo) {
}
//글 상세 조회
public BoardDTO getBoard(int boardNo) {
System.out.println("getBoard 실행");
BoardDTO boardDTO = new BoardDTO();
try {
conn = JDBCUtil.getConnection();
stmt = conn.prepareStatement(GET_BOARD);
stmt.setInt(1, boardNo);
rs = stmt.executeQuery();
if(rs.next()) {
boardDTO.setBoardNO(rs.getInt("BOARD_NO"));
boardDTO.setBoardTitle(rs.getString("BOARD_TITLE"));
boardDTO.setBoardContent(rs.getString("BOARD_CONTENT"));
boardDTO.setBoardWriter(rs.getString("BOARD_WRITER"));
boardDTO.setBoardRegdate(rs.getDate("BOARD_REGDATE"));
boardDTO.setBoardCnt(rs.getInt("BOARD_CNT"));
}
} catch(Exception e) {
System.out.println(e.getMessage());
} finally {
JDBCUtil.close(rs, stmt, conn);
}
return boardDTO;
}
//글 목록 조회
public List<BoardDTO> getBoardList() {
return null;
}
}
package com.mycompany.myapp.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import com.mycompany.myapp.dto.BoardDTO;
import com.mycompany.myapp.service.BoardService;
//Serviceimpl : 비즈니스 로직을 구현하는 클래
@Service("boardService")
public class BoardServiceimpl implements BoardService {
@Autowired
@Qualifier("boardDAO")
BoardDAO boardDAO;
//기본게시판이라 비즈니스 로직이 별도로 존재하지 아ㅣㄴㅎ아서 바로 DAO 객체의 메소드 호출
@Override
public void insertBoard(BoardDTO boardDTO) {
// TODO Auto-generated method stub
System.out.println("삽입이 성공했습니다.");
boardDAO.insertBoard(boardDTO);
}
@Override
public void updateBoard(BoardDTO boardDTO) {
// TODO Auto-generated method stub
}
@Override
public void deleteBoard(int boardNo) {
// TODO Auto-generated method stub
}
@Override
public BoardDTO getBoard(int boardNo) {
// TODO Auto-generated method stub
return boardDAO.getBoard(boardNo);
}
@Override
public List<BoardDTO> getBoardList() {
// TODO Auto-generated method stub
return null;
}
}
package com.mycompany.myapp.dto;
import java.sql.Date;
public class BoardDTO {
private int boardNO;
private String boardTitle;
private String boardContent;
private String boardWriter;
private Date boardRegdate;
private int boardCnt;
public int getBoardNO() {
return boardNO;
}
public void setBoardNO(int boardNO) {
this.boardNO = boardNO;
}
public String getBoardTitle() {
return boardTitle;
}
public void setBoardTitle(String boardTitle) {
this.boardTitle = boardTitle;
}
public String getBoardContent() {
return boardContent;
}
public void setBoardContent(String boardContent) {
this.boardContent = boardContent;
}
public String getBoardWriter() {
return boardWriter;
}
public void setBoardWriter(String boardWriter) {
this.boardWriter = boardWriter;
}
public Date getBoardRegdate() {
return boardRegdate;
}
public void setBoardRegdate(Date boardRegdate) {
this.boardRegdate = boardRegdate;
}
public int getBoardCnt() {
return boardCnt;
}
public void setBoardCnt(int boardCnt) {
this.boardCnt = boardCnt;
}
@Override
public String toString() {
return "BoardDTO [boardNO=" + boardNO + ", boardTitle=" + boardTitle + ", boardContent=" + boardContent
+ ", boardWriter=" + boardWriter + ", boardRegdate=" + boardRegdate + ", boardCnt=" + boardCnt + "]";
}
}
package com.mycompany.myapp.dto;
import java.sql.Date;
// DTO(DATA TRANSfer Object) : 데이터를 전송하는 객체. view-controller-model사이에서 테이블과 매핑되는 형태로데이터를 주고받는 객체.
// VO(value ovject) : 의미상으로는 값을 전달하는 역할만 하는 객체지만 현업에서는 dto동일한 역할을 한다.
//entity
// 디비에서 나온걸 화면에서 전송해줄때 또는 화면에 나온걸 디비에 넣을
// 그냥 맵이나 리스트로처리할때도 있다.
public class UserDTO {
private int id;
private String userID;
private String userPw;
private String userName;
private String userEmail;
private String userTel;
private Date userRegdate;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
public String getUserPw() {
return userPw;
}
public void setUserPw(String userPw) {
this.userPw = userPw;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserEmail() {
return userEmail;
}
public void setUserEmail(String userEmail) {
this.userEmail = userEmail;
}
public String getUserTel() {
return userTel;
}
public void setUserTel(String userTel) {
this.userTel = userTel;
}
public Date getUserRegdate() {
return userRegdate;
}
public void setUserRegdate(Date userRegdate) {
this.userRegdate = userRegdate;
}
@Override
public String toString() {
return "UserDTO [id=" + id + ", userID=" + userID + ", userPw=" + userPw + ", userName=" + userName + ", userEmail="
+ userEmail + ", userTel=" + userTel + ", userRegdate=" + userRegdate + "]";
}
}
package com.mycompany.myapp.common;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.mysql.cj.protocol.Resultset;
//DAO클래스에서 DB Connection이나 DB CONNECTION close해주는 메소드
//DAO 콩통적으로 사용될 메소드 정
public class JDBCUtil {
public static Connection getConnection() {
try {
//사용할 DBMS의 드라이버 클래스 로드
Class.forName("com.mysql.cj.jdbc.Driver");
//DriverManager 클래스의 getConnection메소드로 커넥션을 얻어서 리턴을 해줌.
//매개변수로 url과 username, password를 넣어주면 됨.
return DriverManager.getConnection("jdbc:mysql://localhost:3306/studydb?serverTimezone=UTC","study","Dutajrdjfk1!");
}catch(Exception e) {
System.out.println(e.getMessage());
} return null;
}
//2개의 close메소드
//resultSet이 없는 메소드(insert, delete, update)
//resultset 이 있는 메소드(select)
//resultSet이 없는 메소드(insert, delete, update)
public static void close(PreparedStatement stmt, Connection conn) {
if(stmt!=null) {
try {
if(!stmt.isClosed()) {
stmt.close();
}
}catch(Exception e) {
System.out.println(e.getMessage());
} finally {
stmt = null;
}
}
if(conn !=null) {
try {
if(!conn.isClosed()) {
conn.close();
}
}catch(Exception e) {
System.out.println(e.getMessage());
} finally {
conn=null;
}
}
}
/////resultSet이 있는 메소드(select)
//2개의 close메소드
//resultSet이 없는 메소드(insert, delete, update)
//resultset 이 있는 메소드(select)
//resultSet이 없는 메소드(insert, delete, update)
public static void close(ResultSet rs, PreparedStatement stmt, Connection conn) {
if(rs!=null) {
try {
if(!rs.isClosed()) {
rs.close();
}
}catch(Exception e) {
System.out.println(e.getMessage());
} finally {
rs = null;
}
}
if(conn !=null) {
try {
if(!conn.isClosed()) {
conn.close();
}
}catch(Exception e) {
System.out.println(e.getMessage());
} finally {
conn=null;
}
}
}
}
댓글 영역