[SPRING] Spring Boot에서 MySql Database 쿼리를 사용하는 방법?
SPRINGSpring Boot에서 MySql Database 쿼리를 사용하는 방법?
나는 봄 부팅을 사용하여 API를 만들고있다. 이 프로젝트에서 저는 스프링 웹, JPA, jstl 및 MySql을 API의 종속성으로 사용했습니다. 이 프로젝트에서는 Controller, Model 및 Repository를 만들었습니다. 기본적으로이 API는 CRUD 작업을 수행합니다. GET 요청을 사용하면 3 열만 가져 오려고합니다. 하지만,이 경우 JPA를 사용하는 경우와 같이 사용자 정의 쿼리를 사용하는 방법을 알지 못합니다.
.
내가 어떻게 이럴 수 있니?
내 컨트롤러 클래스.
@RestController
@RequestMapping("/api")
public class ImController {
@Autowired
private ImRepository TaskRepository;
@GetMapping("/projects")
public List<ImModel> findAll() {
return (List<ImModel>) TaskRepository.findAll();
}
@GetMapping("/developers/{id}")
public ImModel findByName(@PathVariable final int id){
return TaskRepository.findById(id);
}
}
내 저장소 인터페이스.
package com.kisalka.pacrestapi.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import com.kisalka.pacrestapi.model.ImModel;
public interface ImRepository extends JpaRepository<ImModel, Integer> {
ImModel findById(int id);
}
해결법
-
==============================
1.Spring Docs : 인터페이스 기반 투영법 쿼리의 결과를 제한하여 속성 이름에 대한 노출을 제한하는 가장 쉬운 방법은 특성에 대한 접근 자 메소드를 표시하는 인터페이스를 선언하는 것입니다.
Spring Docs : 인터페이스 기반 투영법 쿼리의 결과를 제한하여 속성 이름에 대한 노출을 제한하는 가장 쉬운 방법은 특성에 대한 접근 자 메소드를 표시하는 인터페이스를 선언하는 것입니다.
인터페이스를 만들어 결과를 제한 할 수 있습니다.
interface LimitImaginaryTable { String getDevname(); String getHrs(); String getOt(); }
저장소에서 제한된 결과를 얻기 위해 해당 인터페이스를 사용할 수 있습니다
public interface ImRepository extends JpaRepository<ImModel, Integer> { ImModel findById(int id); LimitImaginaryTable findById(int id); List<LimitImaginaryTable> findByDevname(String name); }
이제 컨트롤러에서 원하는 결과 세트를 얻을 수 있습니다.
List<LimitImaginaryTable> myList = taskRepository.findByDevname("JavaDev");
-
==============================
2.저장소 내에서 @Query ( "Your query") 주석을 사용하여 데이터베이스를 쿼리 할 수 있습니다. 예를 들어
저장소 내에서 @Query ( "Your query") 주석을 사용하여 데이터베이스를 쿼리 할 수 있습니다. 예를 들어
@Query(value="SELECT devname,hrs,ot FROM imaginaryTable",nativeQuery=true) private List<Object> getValues();
희망이 당신의 문제를 해결합니다.
-
==============================
3.JSONView에 대한 Spring의 지원을 사용하여 Controller에서 엔티티의 JSON 표현을 사용자 정의 할 수 있습니다.
JSONView에 대한 Spring의 지원을 사용하여 Controller에서 엔티티의 JSON 표현을 사용자 정의 할 수 있습니다.
https://spring.io/blog/2014/12/02/latest-jackson-integration-improvements-in-spring#json-views
@JsonView(View.Summary.class) @GetMapping("/developers/{id}") public ImModel findByName(@PathVariable final int id){ return TaskRepository.findById(id); }
또는 Spring Data의 프로젝션 기능을 사용하여 저장소 레벨에서 처리 할 수 있습니다.
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#projections
@GetMapping("/developers/{id}") public ImModelSummaryProjection findByName(@PathVariable final int id){ return TaskRepository.someMethodReturningSummaryProjection(id); }
-
==============================
4.생성자에 대한 매개 변수로 열을 사용하여 개체를 만들 수 있습니다.
생성자에 대한 매개 변수로 열을 사용하여 개체를 만들 수 있습니다.
내가 만든 사용자 정의 DTO로 내 자신의 예를 들어 보겠습니다.
@Query("SELECT new org.twinnation.site.dto.TitleAndDescriptionAndId(a.title, a.description, a.id) " + "FROM Article a") List<TitleAndDescriptionAndId> getAllArticlesWithoutContent();
DTO TitleAndDescriptionAndId는 다음과 같습니다.
public class TitleAndDescriptionAndId { private String title; private String description; private Long id; public TitleAndDescriptionAndId(String title, String description, Long id) { this.title = title; this.description = description; this.id = id; } // ... }
from https://stackoverflow.com/questions/50096376/how-to-use-mysql-database-queries-in-spring-boot by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring - SpEL은 엔티티 인수를 @PreAuthorize ( "hasPermission")의 null 참조로 평가합니다. (0) | 2019.04.30 |
---|---|
[SPRING] JSTL을 사용하여 Spring Controller에서 JSP로 Map에 액세스 할 때 오류 발생 (0) | 2019.04.30 |
[SPRING] 스프링 컬렉션 병합 (0) | 2019.04.30 |
[SPRING] Java 구성으로 Autowire setter 재정의 (0) | 2019.04.30 |
[SPRING] Oauth2 클라이언트 로그 아웃이 작동하지 않습니다. (0) | 2019.04.30 |