본문 바로가기

🌱JAVA/🌻Service

Service에서 쿼리 결과를 파라미터로 받기

# 시나리오

1. user_table에서 홍길동 이라는 username이 존재하는지 체크한다. → return value = '홍길동'

2. 만약 홍길동 이라는 이름이 없다면 null 값을 반환하고 오류를 뱉는다.

3. 홍길동이 row 데이터를 반환 받는다. 1번에서 조회한 value = '홍길동' 값을 파라미터로 넘긴 후 쿼리 수행

4. 결과값을 String 형태 및 Json 형태등 으로 반환 받는다. (String타입 = dataString, Json타입 = data)

(String은 각 컬럼의 데이터가 콤마로 구분되어 화면에 표시된다. Json 형태는 Json타입에 맞게 반환된다. Json 타입으로 반환받기 위해서는 타입을 Entity로 맞춰주면 된다.)

 

# 들어가기에 앞서 반환받은 String 타입의 데이터와 Entity 타입의 데이터 비교

-  String 타입으로 받게되면 DB의 컬럼값이 1줄로, 각각의 컬럼이 콤마로 구분되어 나오는것을 확인 할 수 있다.

- 반면 Entity 타입으로 받게되면 Json 형태로 구분되어 컬럼 데이터가 나오는것을 확인할 수 있다.

StringType: 4,true,네번째사용자입니다.,홍길동

EntityType: UserEntity(userid=4, username=홍길동, userDescription=네번째사용자입니다., published=true)

# 본격적인 구조를 알아보자

1. Controller

    @GetMapping("/apply_some_data")
    public GeneralResponse<?> apply_some_data(@RequestParam(value = "username") String username) {

        return userService.apply_some_data(username);
    }

2. Service

    public GeneralResponse<?> apply_some_data(String username) {
        String optionalUserEntity = userRepository.apply_some_data(username);
        if (optionalUserEntity.isEmpty()) {
            return GeneralResponse.builder()
                    .status(false)
                    .message("not found")
                    .data(null)
                    .build();
        }
        String optionalUserEntityOneRowString = userRepository.apply_some_data_one_rowString(optionalUserEntity);
        System.out.println("스트링 값 조회: " + optionalUserEntityOneRowString);
        UserEntity optionalUserEntityOneRow = userRepository.apply_some_data_one_row(optionalUserEntity);
        System.out.println("Entity 값 조회: " + optionalUserEntityOneRow);
        return GeneralResponse.builder()
                .status(true)
                .message("get user_list")
                .dataString(optionalUserEntityOneRowString)
                .data(optionalUserEntityOneRow)
                .build();
    }

3. Repository

    @Transactional
    @Query(value = "select username from user_table where username = :username", nativeQuery = true)
    String apply_some_data(@Param("username") String username);

    @Transactional
    @Query(value = "select * from user_table where username = :optionalUserEntity", nativeQuery = true)
    String apply_some_data_one_rowString(@Param("optionalUserEntity") String optionalUserEntity);

    @Transactional
    @Query(value = "select * from user_table where username = :optionalUserEntity", nativeQuery = true)
    UserEntity apply_some_data_one_row(@Param("optionalUserEntity") String optionalUserEntity);

4. Entity

@Getter
@Setter
@ToString
@RequiredArgsConstructor
@AllArgsConstructor
@Builder
@Entity(name = "user_table")
@Table(name = "user_table")
public class UserEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long userid;

    @Column(name = "username")
    private String username;

    @Column(name = "user_description")
    private String userDescription;

    @Column(name = "published")
    private boolean published;

}

5. DTO

@Getter
@Setter
@ToString
@Builder
@AllArgsConstructor
public class GeneralResponse <T> {

    private boolean status;
    private String message;
    private T data;
    private T dataString;

}

6. 결과

- 끝 -

'🌱JAVA > 🌻Service' 카테고리의 다른 글

service를 impl로 사용해야 하는 이유?  (0) 2023.04.03