首页 > 解决方案 > Spring Boot JPA @Query 问题如何解决

问题描述

我需要一些帮助。我正在使用 JPA 编写 Web 应用程序。我通过 YouTube 和其他页面上的教程来制作它。我做了很多,但我需要帮助才能从我的应用程序中查看一件事。我有客户和约会日期,因为这是美发沙龙的申请。

这就是我在 InteliJ https://i.stack.imgur.com/HlDXK.png中的应用程序的外观 我想显示名字例如“Patryk”的客户端

这是来自 model.klienci 的代码

package figura.zaklad_fryzjerski_v3.model;


import javax.persistence.*;

@Entity
@Table(name = "klienci")
public class Klienci {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id_klienta")
    private Integer id_klienta;

    @Column(name = "imie")
    private String imieKlienta;

    @Column(name = "nazwisko")
    private String nazwiskoKlienta;

    @Column(name = "nr_telefonu_klienta")
    private Integer nrTelefonuKlienta;

    @Column(name = "adres_email")
    private  String adresEmailKlienta;
    getters and setters

这是来自 repository.KlienciRepository 的代码

package figura.zaklad_fryzjerski_v3.repository;

import figura.zaklad_fryzjerski_v3.model.Klienci;
import org.springframework.data.jpa.repository.JpaRepository;

import org.springframework.stereotype.Repository;



@Repository
public interface KlienciRepository extends JpaRepository<Klienci, Integer> {

}

这是来自 service.KlienciService 的代码

package figura.zaklad_fryzjerski_v3.service.klienci;

import figura.zaklad_fryzjerski_v3.model.Klienci;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.repository.Query;


import java.util.List;

public interface KlienciService {

    List<Klienci> getAllKlieci();
    void saveKlienci(Klienci klienci);
    Klienci getKlienciById(Integer id_klienta);
    void usunKlientaById(Integer id_klienta);
    Page<Klienci> findPaginated(int pageNo, int pageSize);
}

这是来自 service.KlienciServiceImpl 的代码

package figura.zaklad_fryzjerski_v3.service.klienci;

    import figura.zaklad_fryzjerski_v3.model.Klienci;
    import figura.zaklad_fryzjerski_v3.repository.KlienciRepository;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.domain.Page;
    import org.springframework.data.domain.PageRequest;
    import org.springframework.data.domain.Pageable;
    import org.springframework.stereotype.Service;

    import java.util.List;
import java.util.Optional;

@Service
//@Transactional
public class KlienciServiceImpl implements KlienciService{

    @Autowired
    private KlienciRepository klienciRepository;

    @Override
    public List<Klienci> getAllKlieci() {
        return klienciRepository.findAll();
    }

    @Override
    public void saveKlienci(Klienci klienci){
        this.klienciRepository.save(klienci);
    }

    @Override
    public Klienci getKlienciById(Integer id_klienta) {
        Optional<Klienci> optional = klienciRepository.findById(id_klienta);
        Klienci klienci = null;
        if(optional.isPresent()){
            klienci = optional.get();
        }else{
            throw new RuntimeException("Klient nie znaleziony po id :: "+ id_klienta);
        }
        return klienci;
    }

    @Override
    public void usunKlientaById(Integer id_klienta){
        this.klienciRepository.deleteById(id_klienta);
    }

    @Override
    public Page<Klienci> findPaginated(int pageNo, int pageSize) {

        Pageable pageable = PageRequest.of(pageNo - 1,pageSize);
        return this.klienciRepository.findAll(pageable);
    }
}

我还在这里包括你的控制器,我用来在我的应用程序的页面上显示东西

 //klient wyświetlanie listy klientów
    @Autowired
    public KlienciService klienciService;
    @GetMapping("/klient_baza")
    public String getKlient_baza(Model model){
        model.addAttribute("listaKlientow",klienciService.getAllKlieci());
        return findPaginated(1, model);
    }

    //Dodawanie klientów do bazy danych
    @GetMapping("/klient_dodaj")
    public String getKlient_dodaj(Model model){
        Klienci klienci = new Klienci();
        model.addAttribute("klienci",klienci);
        return "/klient/klient_dodaj";
    }
    //zapisywanie klientów do bazy danych
    @PostMapping("/klientZapisz")
    public String saveKlient(@ModelAttribute("klienci") Klienci klienci, Model model){
        klienciService.saveKlienci(klienci);

        model.addAttribute("typ", "dodanie_rekordu");
        model.addAttribute("sukces", "Pomyślnie dodano klienta");

        return getKlient_baza(model);
    }

    //strona z edytowaniem klienta
    @GetMapping("/klient_dodaj/{id_klienta}")
    public String showFormForUpdate(@PathVariable(value = "id_klienta") Integer id_klienta, Model model) {

        Klienci klienci = klienciService.getKlienciById(id_klienta);
        model.addAttribute("klienci", klienci);
        model.addAttribute("edycja", "true");
        return "/klient/klient_dodaj";

    }
    //usuwanie klienta  z bazy danych
    @GetMapping("/usun_klienta/{id_klienta}")
    public String usunKlienta(@PathVariable(value = "id_klienta")Integer id_klienta, Model model){

        model.addAttribute("typ","usuniecie_rekordu");
        model.addAttribute("sukces","Pomyślnie usunięto klienta");

        this.klienciService.usunKlientaById(id_klienta);
        return getKlient_baza(model);
    }
    //podział na strony
    @GetMapping("/klient_baza/{pageNo}")
    public String findPaginated(@PathVariable(value = "pageNo")int pageNo, Model model){

        int pageSize = 10;
        Page<Klienci> page = klienciService.findPaginated(pageNo,pageSize);
        List<Klienci> klienciList = page.getContent();

        model.addAttribute("aktualnaStrona", pageNo);
        model.addAttribute("wszystkieStrony", page.getTotalPages());
        model.addAttribute("total", page.getTotalElements());


        model.addAttribute("listaKlientow", klienciList);
        return "/klient/klient_baza";

        }

如何在此处添加QUERY METHOD仅使用 @Query 显示名称为“Patryk”的客户端?

标签: javaspringspring-boothibernatejpa

解决方案


您真的不需要使用带有@Query 注释的方法。Spring Data 足够“智能”,可以根据模型属性生成查询。你可以在你的 KlienciRepository 接口中添加一个方法声明:

List<Klienci> listKlienciByNazwiskoKlienta(String name);

Spring data 将在 Klienci 模型中查找名为 nazwiskoKlienta 的属性,并构建一个查询,使用传入的值进行相等性检查。如果您想做通配符查询,Spring data 也可以自动处理:

List<Klienci> listKlienciByNazwiskoKlientaContaing(String name);

推荐阅读