2017-11-03 1 views
0

Es tut mir leid, viele Fragen in diesen Tagen zu stellen, aber ich bin alleine. Ich möchte genau wissen, wann ich eine neue Abfrage im Repository erstellen muss und wann ich Daten im Dienst filtern muss. Zum Beispiel, um eine Person mit Namen zu bekommen, können Sie es auf mehr als 2 verschiedene Arten tun.Spring mvc Service Beispiel vs Ruhezustand Repository Abfrage

public interface PersonRepository extends JpaRepository<Person, Integer> { 

    @Query("SELECT p FROM Person p WHERE LOWER(p.name) = LOWER(:name)") 
    Person findOneByName(@Param("name") String name); 

} 

und

@Service 
public class PersonService implements IService<Person,Integer>{ 
... 
    public Person findOneByName(String name){ 
     Person personFilter = new Person(); 
     personFilter.setName(name); 
     ExampleMatcher matcher = ExampleMatcher.matching().withIgnoreCase().withIgnoreNullValues(); 

     Example<Person > example = Example.of(personFilter,matcher); 

     return personRepository.findOne(example); 
    } 
... 
} 

ich prefere die erste benutzen, weil es einfacher ist, zu implementieren, wann wir Beispiel verwenden?

Antwort

1

Verwenden Sie immer die erste in den einfachen Fällen, wenn Sie mit einer JPQL (HQL) -Anforderung arbeiten können.

Wenn Sie abhängig von den Bedingungen eine Anfrage erstellen müssen, verwenden Sie den zweiten Ansatz. Etwas wie:

if (filter.hasName()) { 
    addNameToExample(); 
} 

if (filter.hasAge()) { 
    addAgeToExample(); 
} 
+0

Danke für Ihren Beitrag war es wirklich hilfreich. Ich habe gerade einen anderen Fall herausgefunden, in dem Beispiel nützlich ist, wenn Sie eine generische Methode in einem generischen Dienst ausführen möchten, da Sie nicht innerhalb des generischen Repositorys auf eine Entität verweisen können, so dass jpql nicht verwendet werden kann. – ScorprocS

+0

@ScorprocS Ja, richtig. Bitte schön. –

Verwandte Themen