[2] 스프링(Spring Tools 4) DB : DAO 파일 만들기
1. 스프링(Spring Tools 4) DB : DAO파일 만들기
프로젝트 오른쪽 마우스 > Class > 패키지명(com.hs.app) > class명 CrudDao.java
package com.hs.app;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired; // 1-2. @Autowired 적으면 자동 import
import org.springframework.beans.factory.annotation.Value; // 1-3. @Value 적으면 자동 import
import org.springframework.jdbc.core.JdbcTemplate; // 1-2. private JdbcTemplate jdbcTmp를 적으면 자동 import
import org.springframework.jdbc.core.RowMapper; // 1-5. RowMapper를 적으면 자동 import
import org.springframework.jdbc.support.rowset.SqlRowSet;
import org.springframework.stereotype.Repository; // 1-1. @Repository를 적으면 자동import
// 1-1. @Repository 설정
// : "이 DAO를 통해서 우리는 값을 업데이트하고 넣는데 그거를 자동으로 좀 설정해줘"라는 의미
@Repository
public class CrudDao {
// 1-2. JDBC템플릿 설정
// : @JDBC.jar파일 자동으로 연결,생성 설정
@Autowired // 자동으로 연결,생성한다는 의미
private JdbcTemplate jdbcTmp;// 생성까지 까지 다 끝. 바로 사용가능
// 1-3. Sql문을 값으로 사용하는 변수를 사용
@Value("insert into dummy values (null, ?)") // null, ? : null은 숫자가 자동으로 생성되니 null값, ?는 필드가 1개
private String insert; // 값넣기
@Value("update dummy set name=? where idx=?") // idx필드에 해당하는 필드name을 수정하라는 의미
private String update; // 값수정
@Value("delete from dummy where idx=?") // idx필드에 해당하는 값을 삭제
private String delete; // 값 삭제
@Value("select * from dummy where idx=?") // idx필드에 해당하는 필드값을 가져오기
private String getOne; // 값 하나만 가져오기
@Value("select * from dummy")
private String getAll; // 값 전부다 가져오기
@Value("select count(idx) from dummy")
private String getCnt; // 값을 하나만 가져오는데 결과가 int 임!!!
// 1-4. Dto 받는 jdbcTmp.update()메소드 만들기
// 셀렉트를 제외하고는 메소드 이름이 update()로 똑같다
// update() 1번째 인자 : insert 변수명,
// update() 2,3,4..번째 인자 : ?에 name을 써줘야하므로 dto.getName()을 가져온다
public int insert(CrudDto dto ) {
return jdbcTmp.update(insert, dto.getName());
}
public int update(CrudDto dto ) {
return jdbcTmp.update(insert, dto.getName(), dto.getIdx());
}
public int delete(int idx ) {
return jdbcTmp.update(insert, idx);
}
// 1-6. Dto 받는 jdbcTmp.queryForObject()메소드 만들기 For Select (1개)
public CrudDto getOne(int idx) {
return jdbcTmp.queryForObject(getOne, new Integer[]{idx}, new DummyMapper());
}
// CrudDto : 1개만 받으므로 반환형은 ArrayList<CrudDto>가 아니라 CrudDto이다
// return jdbcTmp.queryForObject() : 'getOne'이란 쿼리가 처리될거고, 받아온 파라미터 'idx'가 두번째 인자가 되는데 두번째 인자로는 Object[](오브젝트배열)이 들어가야 하므로 new Integer[]{}로 'idx'를 감싸 형변환시키고, 세번째로 'new DummyMapper()'를 통해서 처리가 되게한다.
// 1-7. Dto 받는 jdbcTmp.jdbcTmp.query()메소드 만들기 For Select (여러개)
public List<CrudDto> getAll(){
return jdbcTmp.query(getAll, new DummyMapper());
}
// List<CrudDto> : 여러개 받으므로 반환형은 List<CrudDto>이다. jdbcTmp.query()는 ArrayList<CrudDto>형은 반환형으로 부적절하다.
// return jdbcTmp.query() : 'getOne'이란 쿼리가 처리될거고, 받아온 파라미터 'idx'가 두번째 인자가 되는데 두번째 인자로는 Object[](오브젝트배열)이 들어가야 하므로 new Integer[]{}로 'idx'를 감싸 형변환시키고, 세번째로 'new DummyMapper()'를 통해서 처리가 되게한다.
// 1-5. Dto 받는 RowMapper() 구현하기 For Select
// 셀렉트의 결과는 resultSet에 담기나 스프링에서는 rs를 사용못하므로 내부클래스인 RowMapper를 구현해줘야한다.
// RowMapper :: 셀렉트의 결과인 한 행을 dto에 1:1로 매칭시켜주는 기능을 갖는다.
class DummyMapper implements RowMapper<CrudDto>{
@Override
public CrudDto mapRow(ResultSet rs, int rowNum) throws SQLException {
return new CrudDto(rs.getInt("idx"), rs.getString("name"));
}
}
// DummyMapper : 클래스명은 임의로 설정
// RowMapper<CrudDto> : org.springframework.jdbc.core의 RowMapper이며, <CrudDto>받는 RowMapper라는의미
// @Override public CrudDto mapRow(ResultSet rs, int rowNum) throws SQLException {} : DummyMapper에 마우스올려 Add unimplemented methods를 클릭, 자동 구현시킨다.
// return : 만들어진 값들을 rs로 알아서 꺼내주기 때문에 우리는 만들어서 넣어주면 된다.
// new CrudDto(rs.getInt("idx"), rs.getString("name")); 2개의 값을 가진 객체를 만든다.
}
'IT I 프로그래밍 > 자바 I 스프링 DB' 카테고리의 다른 글
[6] 스프링(Spring Tools 4) DB : 회원가입 만들기 (0) | 2021.10.23 |
---|---|
[5] 스프링(Spring Tools 4) DB : 데이터베이스에 값 넣기 테스트 (0) | 2021.10.22 |
[4] 스프링(Spring Tools 4) DB : home.jsp에서 Dto사용 (0) | 2021.10.22 |
[3] 스프링(Spring Tools 4) DB : HomeController에서 DAO 사용 (0) | 2021.10.22 |
[1] 스프링(Spring Tools 4) DB : DTO파일 만들기 (0) | 2021.10.19 |