Spring mvc服务示例与Hibernate存储库查询

时间:2017-11-03 09:24:44

标签: spring hibernate repository

我很抱歉这几天问了很多问题,但我自己也是。 我想确切地知道何时必须在存储库中创建新查询以及何时必须在服务中过滤数据。 例如,为了通过名字获得一个人,你可以用两种不同的方式来做。

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

}

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

我首选使用第一个,因为我们在使用Example时更容易实现?

1 个答案:

答案 0 :(得分:1)

在您可以通过一个JPQL(HQL)请求工作的情况下,始终使用第一个。

如果您需要根据条件构建请求,请使用第二种方法。 类似的东西:

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

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