代码之家  ›  专栏  ›  技术社区  ›  ScorprocS

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

  •  0
  • ScorprocS  · 技术社区  · 7 年前

    很抱歉,这些天我问了很多问题,但我只能靠自己。 我想知道何时必须在存储库中创建新查询,何时必须在服务中过滤数据。 例如,你可以通过两种以上不同的方式来获得一个人的名字。

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

    我更喜欢使用第一个,因为它更容易实现,我们什么时候使用示例?

    1 回复  |  直到 7 年前
        1
  •  1
  •   v.ladynev    7 年前

    当您可以通过一个JPQL(HQL)请求进行工作时,请始终使用第一个。

    如果需要根据条件生成请求,请使用第二种方法。 类似于:

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