본문 바로가기
Spring

[Spring] 11. DAO 고도화(템플릿 패턴)

by ssunooo 2024. 10. 22.

 

 

 


템플릿 패턴 - DAO 고도화(로직, 성능 개선, 최적화)

 

  • 반복되는 로직을 캡슐화
  • 어려운(복잡한) 로직을 캡슐화
  • 재사용 용이



JDBCTemplate 클래스에서 사용하게 될 DataSource 클래스의 객체를 등록

<bean 추가 코드>

<bean class="org.springframework.jdbc.datasource.BasicDataSource" id="ds">
<property name="driverName" value="cohttp://m.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/KIM"/>
<property name="userName" value="root"/>
<property name="password" value="1234"/>
</bean>

 


<고도화된 DAO 코드>

package com.koreait.app.biz.board;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

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

@Repository
public class BoardDAO2 {
    private final String SELECTALL = "SELECT BOARD_NUM,BOARD_CONTENT,BOARD_WRITER_ID FROM BOARD";
    private final String SEARCH_CONTENT = "SELECT BOARD_NUM, BOARD_CONTENT, BOARD_WRITER_ID \r\n"
            + "FROM BOARD \r\n"
            + "WHERE BOARD_CONTENT LIKE CONCAT('%', ?, '%')"; // 내용으로 검색
    private final String SEARCH_WRITER = "SELECT BOARD_NUM,BOARD_CONTENT,BOARD_WRITER_ID FROM BOARD WHERE BOARD_WRITER_ID=?"; // 아이디로 검색

    private final String SELECTONE = "SELECT BOARD_NUM,BOARD_CONTENT,BOARD_WRITER_ID,BOARD_LOCATION FROM BOARD WHERE BOARD_NUM=?";

    private final String UPDATE = "UPDATE BOARD \n" +
            "SET BOARD_LOCATION = ? \n" +
            "WHERE BOARD_NUM = ?";

    private final String INSERT = "INSERT INTO BOARD (BOARD_NUM,BOARD_CONTENT,BOARD_WRITER_ID) VALUES(?,?,?)";

    @Autowired
    private JdbcTemplate jdbcTemplate; // 스프링부트 내장객체

    public List<BoardDTO> selectAll(BoardDTO boardDTO) {

        String sql="";

        if(boardDTO.getCondition().equals("SEARCH_CONTENT")&& boardDTO.getKeyword()!=null){
            System.out.println("내용으로 검색~~~");
            sql=SEARCH_CONTENT;
            System.out.println("내용 검색어 = [ "+boardDTO.getKeyword()+" ]");
        }
        else if (boardDTO.getCondition().equals("SEARCH_WRITER")&& boardDTO.getKeyword()!=null) {
            System.out.println("아이디로 검색~~~");
            sql=SEARCH_WRITER;
            System.out.println("아이디 검색어 = [ "+boardDTO.getKeyword()+" ]");
        }
        else if(boardDTO.getCondition().equals("ALL")) {
            sql=SELECTALL; // 전체 검색
        }
        else {
            System.err.println("사용자 입력 오류");
        }
        Object[] args= {boardDTO.getKeyword()};
        if(sql.equals(SELECTALL) || sql.equals("")) {
            return jdbcTemplate.query(sql, new BoardRowMapper());
        }
        else {
            return jdbcTemplate.query(sql, args, new BoardRowMapper());
        }
    }
    public BoardDTO selectOne(BoardDTO boardDTO) {

        Object[] args= {boardDTO.getBid()};
        return jdbcTemplate.queryForObject(SELECTONE,args,new BoardOneRowMapper());
    }
    public boolean insert(BoardDTO boardDTO) {

        int result=jdbcTemplate.update(INSERT,boardDTO.getBid(),boardDTO.getContent(),boardDTO.getWriter());
        if(result<=0) {
            return false;
        }
        return true;
    }
    public boolean update(BoardDTO boardDTO) {

        int result=jdbcTemplate.update(UPDATE,boardDTO.getPath(),boardDTO.getBid());
        if(result<=0) {
            return false;
        }
        return true;
    }
    public boolean delete(BoardDTO boardDTO) {
        return true;
    }
}

class BoardRowMapper implements RowMapper<BoardDTO> {

    public BoardDTO mapRow(ResultSet rs, int rowNum) throws SQLException {
        BoardDTO boardDTO=new BoardDTO();
        boardDTO.setBid(rs.getInt("BOARD_NUM"));
        boardDTO.setContent(rs.getString("BOARD_CONTENT"));
        boardDTO.setWriter(rs.getString("BOARD_WRITER_ID"));
        return boardDTO;
    };
}
class BoardOneRowMapper implements RowMapper<BoardDTO> {

    public BoardDTO mapRow(ResultSet rs, int rowNum) throws SQLException {
        BoardDTO boardDTO=new BoardDTO();
        boardDTO.setBid(rs.getInt("BOARD_NUM"));
        boardDTO.setContent(rs.getString("BOARD_CONTENT"));
        boardDTO.setWriter(rs.getString("BOARD_WRITER_ID"));
        boardDTO.setPath(rs.getString("BOARD_LOCATION"));
        return boardDTO;
    };
}




2024.10.22

'Spring' 카테고리의 다른 글

[Spring] 13. 파일 입출력  (0) 2024.10.24
[Spring] 12. 트랜잭션  (0) 2024.10.22
[Spring] 10-1. AOP 어노테이션  (0) 2024.10.17
[Spring] 10. AOP(관점 지향 프로그래밍)  (0) 2024.10.16
[Spring] 09. Spring 비동기 처리  (0) 2024.10.15