Spring Data JPA 派生查询方法命名速查表
🚀 1. 基本结构
findBy + 属性名 + [运算符] + [And/Or + 其它条件]
📝 2. 常见关键字
(1)精确匹配
关键字 | 示例 | 生成的 SQL |
---|
findBy | findByUserId(String id) | WHERE user_id = ? |
findBy...And... | findByFileMd5AndUserId(String f, String u) | WHERE file_md5 = ? AND user_id = ? |
findBy...Or... | findByNameOrEmail(String n, String e) | WHERE name = ? OR email = ? |
(2)比较运算
关键字 | 示例 | SQL |
---|
LessThan | findBySizeLessThan(Long size) | < |
LessThanEqual | findBySizeLessThanEqual(Long size) | <= |
GreaterThan | findBySizeGreaterThan(Long size) | > |
GreaterThanEqual | findBySizeGreaterThanEqual(Long size) | >= |
Between | findByCreatedAtBetween(Date d1, Date d2) | BETWEEN ? AND ? |
(3)模糊匹配
关键字 | 示例 | SQL |
---|
Like | findByNameLike(String n) | LIKE ? |
Containing | findByNameContaining(String n) | LIKE %?% |
StartingWith | findByNameStartingWith(String n) | LIKE ?% |
EndingWith | findByNameEndingWith(String n) | LIKE %? |
(4)空值/布尔
关键字 | 示例 | SQL |
---|
IsNull | findByOrgTagIsNull() | IS NULL |
IsNotNull | findByOrgTagIsNotNull() | IS NOT NULL |
True | findByIsPublicTrue() | is_public = true |
False | findByIsPublicFalse() | is_public = false |
(5)排序 / 限制
关键字 | 示例 | SQL |
---|
OrderBy | findByUserIdOrderByCreatedAtDesc(String id) | ORDER BY created_at DESC |
First | findFirstByOrderByCreatedAtDesc() | LIMIT 1 |
Top | findTop3ByStatusOrderByCreatedAtDesc() | LIMIT 3 |
(6)集合 / In 查询
关键字 | 示例 | SQL |
---|
In | findByUserIdIn(List<String> ids) | user_id IN (?) |
NotIn | findByUserIdNotIn(List<String> ids) | user_id NOT IN (?) |
🎯 3. 小技巧
-
返回类型
List<Entity>
→ 多个结果Optional<Entity>
→ 单个可空结果Entity
→ 单个结果(可能 NPE,不推荐)Page<Entity>
→ 分页Slice<Entity>
→ 游标式分页
-
复杂查询 → 如果命名太长,最好用 @Query
注解写 JPQL/SQL。
✅ 总结:
findByFileMd5AndUserId(...)
就是 派生查询,属于最常见的命名规则。
以后写 Repository 方法,就按这个表组合单词,Spring Data JPA 会自动帮你生成 SQL。