728x90
반응형
# 시나리오
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. 결과
- 끝 -
728x90
반응형
'🌱JAVA > 🌻Service' 카테고리의 다른 글
service를 impl로 사용해야 하는 이유? (0) | 2023.04.03 |
---|