通常在存储库上触发的大多数数据访问操作都会导致对 LDAP 目录运行查询。 定义这样的查询是在存储库接口上声明方法的问题,如以下示例所示:

具有查询方法的 PersonRepository
interface PersonRepository extends PagingAndSortingRepository<Person, String> {

    List<Person> findByLastname(String lastname);                            (1)

    List<Person> findByLastnameFirstname(String lastname, String firstname); (2)
}
1 该方法显示对具有给定 . 通过分析可与 和 连接的约束的方法名称来派生查询。 因此,方法名称将生成 .lastnameAndOr(&(objectclass=person)(lastname=lastname))
2 该方法显示对具有给定 和 的所有人的查询。 查询是通过分析方法名称派生的。 因此,方法名称将生成 .lastnamefirstname(&(objectclass=person)(lastname=lastname)(firstname=firstname))
1 该方法显示对具有给定 . 通过分析可与 和 连接的约束的方法名称来派生查询。 因此,方法名称将生成 .lastnameAndOr(&(objectclass=person)(lastname=lastname))
2 该方法显示对具有给定 和 的所有人的查询。 查询是通过分析方法名称派生的。 因此,方法名称将生成 .lastnamefirstname(&(objectclass=person)(lastname=lastname)(firstname=firstname))

下表提供了可用于查询方法的关键字示例:

表 1.查询方法支持的关键字
关键词 样本 合乎逻辑的结果

LessThanEqual

findByAgeLessThanEqual(int age)

(attribute⇐age)

GreaterThanEqual

findByAgeGreaterThanEqual(int age)

(attribute>=age)

IsNotNull,NotNull

findByFirstnameNotNull()

(firstname=*)

IsNull,Null

findByFirstnameNull()

(!(firstname=*))

Like

findByFirstnameLike(String name)

(firstname=name)

NotLike,IsNotLike

findByFirstnameNotLike(String name)

(!(firstname=name*))

StartingWith

findByStartingWith(String name)

(firstname=name*)

EndingWith

findByFirstnameLike(String name)

(firstname=*name)

Containing

findByFirstnameLike(String name)

(firstname=*name*)

(No keyword)

findByFirstname(String name)

(Firstname=name)

Not

findByFirstnameNot(String name)

(!(Firstname=name))