Как использовать запросы базы данных MySql в Spring Boot? - PullRequest
0 голосов
/ 30 апреля 2018

Я создаю API с помощью весенней загрузки. В этом проекте я использовал Spring Web, JPA, jstl и MySql как зависимости API. В этом проекте я создал контроллер, модель и репозиторий. По сути, этот API выполняет операции CRUD. Когда я использую запрос GET, я хочу получить только 3 столбца. Но дело в том, что я использовал JPA в этом, и я не знаю, как использовать пользовательские запросы, такие как

«ВЫБЕРИТЕ devname, hrs, ОТ Мнимой таблицы»

.

Как я могу это сделать?

Мой класс контроллеров.

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

}

Ответы [ 4 ]

0 голосов
/ 01 мая 2018

Вы можете создать объект, используя столбцы в качестве параметров для конструктора.

Я приведу собственный пример с пользовательским 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;
    }

    // ...

}
0 голосов
/ 30 апреля 2018

Вы можете использовать аннотацию @Query("Your query") внутри хранилища для запроса базы данных. Например

@Query(value="SELECT devname,hrs,ot FROM imaginaryTable",nativeQuery=true)
private List<Object> getValues();

Надеюсь, это решит вашу проблему.

0 голосов
/ 30 апреля 2018

Как описано в Spring Docs: Проекции на основе интерфейса Самый простой способ ограничить результат запросов для предоставления только атрибутов имени - это объявить интерфейс, который предоставит методы доступа для свойств, которые должны быть прочитаны.

Вы можете создать interface для ограничения результатов

interface LimitImaginaryTable {
  String getDevname();
  String getHrs();
  String getOt();
}

и затем в вашем repository вы можете использовать этот интерфейс для получения ограниченных результатов

public interface ImRepository extends JpaRepository<ImModel, Integer> {

    ImModel findById(int id);
    LimitImaginaryTable findById(int id);
    List<LimitImaginaryTable> findByDevname(String name);

}

Теперь вы можете просто получить желаемый набор результатов в Controller

List<LimitImaginaryTable> myList = taskRepository.findByDevname("JavaDev");
0 голосов
/ 30 апреля 2018

Вы можете настроить представление JSON сущности в Контроллере, используя поддержку Spring для JSONView Джексона.

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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...