
Repository의 메서드 선언시에 지정된 패턴에 따라 메서드명을 작성하면 JPA가 SQL을 만들어주는 방법
List<SampleUserEntity> findByName(String name);
SampleUserEntity findByTelNumber(String telNumber);
List<SampleUserEntity> findByNameAndAddress(String name, String address);
List<SampleUserEntity> findByAddressContaining(String address);
List<SampleUserEntity> findByNameOrderByTelNumberDesc(String name);
boolean existsByName(String name);
int countByName(String name);
쿼리 메서드명으로만 쿼리를 생성하는 것이 한계가 있을 때나, 복잡한 쿼리를 작성해야 할 때 사용하는 어노테이션
@Query(value="SELECT u FROM user u WHERE u.name = ?1 AND u.address = ?2")
List<SampleUserEntity> getJpql(String name, String address);
@Query(value="SELECT u FROM user u WHERE u.name = :name AND u.address = :address")
List<SampleUserEntity> getJpql2(
@Param("name") String name,
@Param("address") String address
);
@Query(value=
"SELECT * " +
"FROM sample_user " +
"WHERE name = :name " +
"AND address = :address"
, nativeQuery=true)
List<SampleUserEntity> getNativeSql(
@Param("name") String name,
@Param("address") String address
);
경로 base > repository > SampleUserRepository.java
@Repository
public interface SampleUserRepository
extends JpaRepository<SampleUserEntity, String> {
List<SampleUserEntity> findByName(String name);
SampleUserEntity findByTelNumber(String telNumber);
List<SampleUserEntity> findByNameAndAddress(String name, String address);
List<SampleUserEntity> findByAddressContaining(String address);
List<SampleUserEntity> findByNameOrderByTelNumberDesc(String name);
boolean existsByName(String name);
int countByName(String name);
@Query(value="SELECT u FROM user u WHERE u.name = ?1 AND u.address = ?2")
List<SampleUserEntity> getJpql(String name, String address);
@Query(value="SELECT u FROM user u WHERE u.name = :name AND u.address = :address")
List<SampleUserEntity> getJpql2(
@Param("name") String name,
@Param("address") String address
);
@Query(value=
"SELECT * " +
"FROM sample_user " +
"WHERE name = :name " +
"AND address = :address"
, nativeQuery=true)
List<SampleUserEntity> getNativeSql(
@Param("name") String name,
@Param("address") String address
);
전체코드 : interface 생성
경로: base > service > sampleService.java
public interface SampleService {
ResponseEntity<String> queryString();
}
전체코드 : interface 구현
경로: base > service > implement > sampleServiceImplement.java
@Service
@RequiredArgsConstructor
public class SampleServiceImplement implements SampleService {
private final SampleUserRepository sampleUserRepository;
@Override
public ResponseEntity<String> queryString() {
List<SampleUserEntity> sampleUserEntities = sampleUserRepository.getNativeSql("홍길동", "부산광역시");
return ResponseEntity.status(HttpStatus.OK).body(sampleUserEntities.toString());
}
}
경로: base > dto > PostUserRequestDto.java
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class PostUserRequestDto {
@NotBlank
private String userId;
@NotBlank
private String password;
@NotBlank
private String name;
private String address;
@NotBlank
private String telNumber;
}
경로: base > entity > SampleUserEntity.java
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructo현
@ToString
@Entity(name="user")
@Table(name="sample_user")
public class SampleUserEntity {
@Id
private String userId;
private String password;
private String name;
private String address;
private String telNumber;
}
경로: base > controller > SampleController.java
@RestController
@RequestMapping("/sample")
@RequiredArgsConstructor
public class SampleController {
@GetMapping("")
public ResponseEntity<String> queryMethod() {
ResponseEntity<String> response = sampleService.queryString();
return response;
}
}