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))