【问题标题】:Spring mvc Service Example vs Hibernate Repository QuerySpring mvc 服务示例与 Hibernate 存储库查询
【发布时间】:2017-11-03 09:24:43
【问题描述】:

很抱歉这几天问了很多问题,但我只能靠自己了。 我想确切地知道何时必须在存储库中创建新查询以及何时必须过滤服务中的数据。 例如,要通过姓名获取一个人,您可以通过 2 种以上不同的方式进行操作。

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 ?

【问题讨论】:

    标签: spring hibernate repository


    【解决方案1】:

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

    如果您需要根据条件构建请求,请使用第二种方法。 比如:

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

    【讨论】:

    • 感谢您的帖子,它真的很有帮助。我刚刚发现了另一种情况,当您想在通用服务中执行通用方法时,示例很有用,因为您无法在通用存储库中引用实体,因此无法使用 jpql。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 2019-06-17
    相关资源
    最近更新 更多