본문 바로가기
SpringBoot Server/API

JDBC 예제 - 유저관리 API GET All

by ssury94 2024. 12. 22.

 

https://maeilcoding.tistory.com/116

 

예제 - 유저관리 API GET id

https://maeilcoding.tistory.com/115 Controller, DAO, DTO 알아보기 // 예제 - 유저관리 API POSTDAO (Data Access Object) 란?데이터베이스나 기타 영속성 메커니즘에 접근하는 객체 목적: 데이터 접근 로직과 비즈니스

maeilcoding.tistory.com

이번엔 전체 사용자 조회 API를 만들어봅시다.

 

유저 이름과 이메일을 관리하는 API만들기 예제 // todo 3 getAllUserInfo

1. 명세서 확인


2. Postman에 리퀘스트 작성

3. Controller에서 getAllUsersInfo 메서드 작성 시작

//todo 3 getAllUserInfo
@GetMapping("/api/users")
getAllUserInfo() {

4. DAO에서 getAllUsersInfo 메서드 작성

//todo Get all
public List<User> getAllUserInfo() {
    String sql = "SELECT *\n" +
            "FROM user;";
    return jdbcTemplate.query(sql, new UserRowMapper());
}

 

jdbcTemplate.query는 sql쿼리를 ArrayList로 처리해줌

List<User> User 객체 리스트를 반환

 

private static class UserRowMapper implements RowMapper<User> {

    @Override
    public User mapRow(ResultSet rs, int rowNum) throws SQLException {
        User user = new User();
        user.setId(rs.getLong("id"));
        user.setName(rs.getString("name"));
        user.setEmail(rs.getString("email"));
        user.setCreatedAt(rs.getString("created_at"));
        return user;
    }
}

 

RowMapper 인터페이스에 에  조회 결과의 각 행을 Java 객체로 매핑합니다.


5. 명세서 요구사항에 count, status, data를 필요로 한다. DTO를 하나 더 만들자

public class UserAllResDTO {
    public String status;
    public Integer count;
    public List<User> data;

    public UserAllResDTO() {
    }

    public UserAllResDTO(String status, Integer count, List<User> data) {
        this.status = status;
        this.count = count;
        this.data = data;
    }
}

 

count - 총 유저 수

count에 int대신 Integer를 쓴 이유

Integer는 객체 타입이기 때문에 null 값을 가질 수 있습니다. 이는 데이터베이스와의 상호작용에서 유용합니다. 

예를 들어, SQL 쿼리 결과가 없거나 특정 필드가 비어 있을 때, Integer를 사용하면 해당 필드를 null로 설정할 수 있습니다. 

반면, int는 기본 데이터 타입으로 null 값을 가질 수 없습니다

 

Integer는 int의 래퍼 클래스입니다. 이는 기본 데이터 타입을 객체로 다룰 수 있게 해줍니다. 

객체로 다루면 컬렉션 프레임워크(예: ArrayList)와 같은 자료구조에 저장할 수 있습니다. 

자바의 컬렉션은 객체만 저장할 수 있기 때문에, int 대신 Integer를 사용해야 합니다


6. Controller 메서드 마저 완성

//todo 3 getAllUserInfo
@GetMapping("/api/users")
ResponseEntity<UserAllResDTO> getAllUserInfo() {
    try {
        List<User> userlist= userDAO.getAllUserInfo();
        return ResponseEntity.status(200).body(new UserAllResDTO("success", userlist.size(), userlist));
    } catch (Exception e) {
        return ResponseEntity.status(400).build();

 

DAO에서 작성한 getAllUserInfo()는 사용자정보를 List<User>로 반환함

 

ResponseEntity.status(200).body(new UserAllResDTO("success", userlist.size(), userlist));

UserAllResDTO = 응답 데이터를 담기 위한 DTO / status, count(userList.size()), data(userList))

 


7. Response 결과확인