创建查询

基础Spring Data repository内置的查询生成器机制对于创建实体仓库的约束查询是有用的,它会从方法名中去掉find…By,read…By,query…By,count…By和get…By这些前缀并解析剩下的内容.这些前缀还能包含更多的表达式例如Distinct,设置一个distinct标志并在查询中创建它,然后第一个By的动作就像一个分隔符来表明查询实际标准的开始。最基本的方式你可以在实体属性中定义表达式并用AND和OR连接它们。

  1. public interface PersonRepository extends Repository<user,Long>{
  2. List<Person> findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);
  3. //Enables the distinct flag for the query
  4. List<Person> findDistinctPeopleByLastnameOrFirstname(String lastname,String firstname);
  5. List<Person> findPeopleDistinctByLastnameOrFirstname(String lastname, String firstname);
  6. // Enabling ignoring case for an individual property
  7. List<Person> findByLastnameIgnoreCase(String lastname);
  8. // Enabling ignoring case for all suitable properties
  9. List<Person> findByLastnameAndFirstnameAllIgnoreCase(String lastname, String firstname);
  10. // Enabling static ORDER BY for a query
  11. List<Person> findByLastnameOrderByFirstnameAsc(String lastname);
  12. List<Person> findByLastnameOrderByFirstnameDesc(String lastname);
  13. }

解析方法实际的结果依赖于你创建查询的持久存储。然后这里还算是有一些需要注意的事情。

  • 表达式通常会结合级联的操作来进行属性遍历。你可以结合表达式属性AND和OR。对于属性表达式你也可以使用可支持的操作比如Between,LessThan,GreaterThan ,Like。这些支持的操作由不同的数据存储而不同,所以你需要查看你参考的文档中合适的部分。
  • 方法解析支持为某些属性设置一个IgnoreCase标志(例如,findByLastnameIgnoreCase(…))或者为所有属性都支持忽略类型(通常是String实例,例如,findByLastnameAndFirstnameAllIgnoreCase(…))。是否支持ignoring cases 可能根据store不同而不同,所以相关部分在特殊库查询方法的参考文档中。
  • 你可以通过增加一个OrderBy字段在按照属性来升降序的查询方法中用来静态排序。想要创建一个查询方法能够支持动态排序,请看特殊参数处理