템플릿 패턴 - 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 |