티스토리 뷰
Spring JDBC 사용을 위한 기본 설정을 직전 포스팅에서 완료했으니, 이제 JDBCTemplete 의 메서드들을 사용하여 DB 연동과 관련된 여러 작업들을 쉽게 처리할 수 있다.
바로 사용해보자.
1. update() : INSERT, UPDATE, DELETE 구문을 처리하기 위한 메서드
int update(String sql, Object arg) => sql 구문에 들어가는 쿼리스트링 수만큼 arg 나열 int update(String sql, Object[] args) => sql 구문에 들어가는 쿼리스트링들을 가지고 있는 배열 삽입 |
2. queryForInt() : SELECT 구문으로 리턴된 정수값을 받기 위한 메서드
int queryForInt(String sql) => 쿼리스트링 사용 x int queryForInt(String sql, Object arg) int queryForInt(String sql, Object[] args) |
3. queryForObject() : SELECT 구문으로 얻은 결과를 특정 JAVA 객체로 맵핑하여 리턴받을 때 사용
(검색 결과가 2개 이상이라면 에러)
* 검색 결과를 자바 객체로 맵핑할 RowMapper 객체를 반드시 지정해야 한다.
◎ RowMapper 예:
package com.choonham.biz.board.impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
import com.choonham.biz.board.BoardVO;
public class BoardRowMapper implements RowMapper<BoardVO>{
public BoardRowMapper() {
// TODO Auto-generated constructor stub
}
@Override
public BoardVO mapRow(ResultSet rs, int rowNum) throws SQLException {
BoardVO board = new BoardVO();
board.setSeq(rs.getInt("SEQ"));
board.setTitle(rs.getString("TITLE"));
board.setWriter(rs.getString("WRITER"));
board.setContent(rs.getString("CONTENT"));
board.setRegDate(rs.getDate("REGDATE"));
board.setCnt(rs.getInt("CNT"));
return board;
}
}
Spring Container는 RowMapper 객체를 queryForObject 메서드로 넘겨 받으면, SQL 구문을 수행한 후 자동으로 RowMapper 객체의 mapRow()를 수행한다.
Object queryForObject(String sql) Object queryForObject(String sql, RowMapper<T> rowMapper) => 쿼리스트링 x Object queryForObject(String sql, Object[] args, RowMapper rowMapper) |
4. query() : SELECT 구문으로 얻은 결과가 목록 형태일 때 사용
* 마찬가지로 자바 객체로 맵핑할 RowMapper 객체를 반드시 지정해야 한다.
List query(String sql) List query(String sql, RowMapper<T> rowMapper) List query(String sql, Object[] args, RowMapper<T> rowMapper) |
그럼 이제 위에서 정리한 메서드들을 사용하여 DAO Class 를 구현해야하는데, DAO를 구현하는데는 크게 2가지 방법이 있다.
1. JdbcDAOSupport 상속
DAO로 사용할 클래스에서 JdbcDAOSupport 클래스를 상속받아 JDBCTemplete를 얻어 사용할 수 있다.
◎BoardDAOSpring.java
package com.choonham.biz.board.impl;
import java.util.List;
import org.apache.tomcat.jdbc.pool.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.stereotype.Repository;
import com.choonham.biz.board.BoardVO;
@Repository
public class BoardDAOSpring extends JdbcDaoSupport{
//SQL 명령어
private final String BOARD_INSERT = "insert into board(seq, title, writer, content) values((select nvl(max(seq), 0)+1 from board), ?, ?, ?)";
private final String BOARD_UPDATE = "update board set title = ?, content = ?, where seq = ?";
private final String BOARD_DELETE = "delete board where seq = ?";
private final String BOARD_GET = "select * from board where seq = ?";
private final String BOARD_LIST = "select * from order by seq desc";
public BoardDAOSpring() {
}
//DataSource 의존성 주입
@Autowired
public void setSuperDataSource(DataSource dataSource) {
super.setDataSource(dataSource);
}
public void insertBoard(BoardVO vo) {
super.getJdbcTemplate().update(BOARD_INSERT, vo.getTitle(), vo.getWriter(), vo.getContent());
}
public void updateBoard(BoardVO vo) {
super.getJdbcTemplate().update(BOARD_UPDATE, vo.getTitle(), vo.getContent(), vo.getSeq());
}
public void deleteBoard(BoardVO vo) {
super.getJdbcTemplate().update(BOARD_DELETE, vo.getSeq());
}
public List<BoardVO> getBoardList(BoardVO vo) {
return (List<BoardVO>)super.getJdbcTemplate().queryForObject(BOARD_LIST, new BoardRowMapper());
}
public BoardVO getBoard(BoardVO vo) {
Object[] args = {vo.getSeq()};
return (BoardVO)super.getJdbcTemplate().queryForObject(BOARD_LIST, args, new BoardRowMapper());
}
}
2. bean 객체를 이용하여 jdbcTemplete 등록
applicationContext.xml 파일에 아래와 같이 jdbcTemplete을 직접 등록하여 사용할 수도 있다.
<!-- Spring JDBC -->
<bean id = "jdbcTemplete" class = "org.springframework.jdbc.core.JdbcTemplate">
<property name = "dataSource" ref ="dataSource"></property>
</bean>
◎BoardDAOSpring.java
package com.choonham.biz.board.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import com.choonham.biz.board.BoardVO;
@Repository
public class BoardDAOSpring{
//SQL 명령어
private final String BOARD_INSERT = "insert into board(seq, title, writer, content) values((select nvl(max(seq), 0)+1 from board), ?, ?, ?)";
private final String BOARD_UPDATE = "update board set title = ?, content = ?, where seq = ?";
private final String BOARD_DELETE = "delete board where seq = ?";
private final String BOARD_GET = "select * from board where seq = ?";
private final String BOARD_LIST = "select * from order by seq desc";
@Autowired
private JdbcTemplate jdbcTemplate;
/**
//DataSource 의존성 주입
@Autowired
public void setSuperDataSource(DataSource dataSource) {
super.setDataSource(dataSource);
}
**/
public void insertBoard(BoardVO vo) {
jdbcTemplate.update(BOARD_INSERT, vo.getTitle(), vo.getWriter(), vo.getContent());
}
public void updateBoard(BoardVO vo) {
jdbcTemplate.update(BOARD_UPDATE, vo.getTitle(), vo.getContent(), vo.getSeq());
}
public void deleteBoard(BoardVO vo) {
jdbcTemplate.update(BOARD_DELETE, vo.getSeq());
}
public List<BoardVO> getBoardList(BoardVO vo) {
return (List<BoardVO>)jdbcTemplate.queryForObject(BOARD_LIST, new BoardRowMapper());
}
public BoardVO getBoard(BoardVO vo) {
Object[] args = {vo.getSeq()};
return (BoardVO)jdbcTemplate.queryForObject(BOARD_LIST, args, new BoardRowMapper());
}
}
이제 생성해놓은 DAO 메서드들은 이전과 동일한 방법으로 Service를 구현받은 ServiceImpl 클래스에서 호출하여 사용하면 된다.
◎BoardService
package com.choonham.biz.board;
import java.util.List;
public interface BoardService {
// 글 등록
void insertBoard(BoardVO vo);
//글 수정
void updateBoard(BoardVO vo);
//글 삭제
void deleteBoard(BoardVO vo);
//글 목록
List<BoardVO> getBoardList(BoardVO vo);
//글 상세
BoardVO getBoard(BoardVO vo);
}
◎BoardServiceImpl
package com.choonham.biz.board.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.choonham.biz.board.BoardService;
import com.choonham.biz.board.BoardVO;
@Service("boardService")
public class BoardServiceImpl implements BoardService{
@Autowired
private BoardDAOSpring boardDAOSpring;
@Override
public void insertBoard(BoardVO vo) {
boardDAOSpring.insertBoard(vo);
}
@Override
public void updateBoard(BoardVO vo) {
boardDAOSpring.updateBoard(vo);
}
@Override
public void deleteBoard(BoardVO vo) {
boardDAOSpring.deleteBoard(vo);
}
@Override
public List<BoardVO> getBoardList(BoardVO vo) {
return boardDAOSpring.getBoardList(vo);
}
@Override
public BoardVO getBoard(BoardVO vo) {
return boardDAOSpring.getBoard(vo);
}
public BoardServiceImpl() {
}
}
'[JAVA] > Spring' 카테고리의 다른 글
[Spring] AOP 용어 정리 (0) | 2021.06.17 |
---|---|
[Spring] AOP(Aspect Oriented Programming) (0) | 2021.06.17 |
[Spring] Spring JDBC 1 : 사용을 위한 기본 설정 (0) | 2021.06.17 |
[Spring] Spring Project 제어 구조 (0) | 2021.06.16 |
[Spring] bean 7 : 객체 자동 등록, component-scan (0) | 2021.06.16 |
- redux
- await
- javascript
- 맛집
- 인천 구월동 맛집
- 파니노구스토
- redux-thunk
- react
- Promise
- 인천 구월동 이탈리안 맛집
- AsyncStorage
- Async
- 이탈리안 레스토랑
- react-native
- 정보보안기사 #실기 #정리
- Total
- Today
- Yesterday