Spring Data JPA基本方法调用规律

一、命名规则核心逻辑

派生方法名由三部分组成:findBy + 属性名 + 条件,其中:

  1. 前缀(固定关键词)findBydeleteBycountByexistsBy 等。
  2. 属性名:实体类的字段名(需严格匹配驼峰命名)。
  3. 条件 :可选,如 GreaterThanLessThanLike 等。

示例:

复制代码
// 方法名       = 前缀 + 属性名 + 条件
List<User> findByAgeGreaterThan(int age); // 查询年龄大于 age 的用户

二、常见前缀与用途

前缀 用途 返回值类型
findBy 查询符合条件的记录 List<T>Optional<T>
deleteBy 删除符合条件的记录 long(删除数量)
countBy 统计符合条件的记录数 long
existsBy 判断是否存在符合条件的记录 boolean
findFirstBy 查询符合条件的第一条记录 Optional<T>
findTop5By 查询符合条件的前 5 条记录 List<T>

三、常用条件关键字

条件关键字 含义 示例方法名 生成 SQL 片段
And 逻辑与 findByNameAndAge WHERE name = ? AND age = ?
Or 逻辑或 findByNameOrAge WHERE name = ? OR age = ?
GreaterThan 大于 findByAgeGreaterThan WHERE age > ?
LessThan 小于 findByAgeLessThan WHERE age < ?
Between 在区间内 findByAgeBetween WHERE age BETWEEN ? AND ?
Like 模糊匹配 findByNameLike WHERE name LIKE ?
IgnoreCase 忽略大小写 findByNameIgnoreCase WHERE UPPER(name) = UPPER(?)
OrderBy 排序 findByNameOrderByAgeDesc WHERE name = ? ORDER BY age DESC
IsNull / NotNull 空值判断 findByEmailIsNull WHERE email IS NULL
In / NotIn 包含 / 不包含 findByAgeIn WHERE age IN (?, ?, ?)

四、处理复杂属性与嵌套查询

1. 关联实体属性

通过 _ 或直接拼接关联实体的属性名:

复制代码
// 假设 User 有一个 Address 类型的关联字段 address
List<User> findByAddress_City(String city); // 等价于 findByAddressCity
2. 集合属性查询

若实体包含集合字段(如 List<Role>):

复制代码
// 查询拥有特定角色的用户
List<User> findByRolesName(String roleName);

五、实战技巧:如何快速编写派生方法

  1. 使用 IDE 自动补全

    在接口中输入 findBy,IDE 会根据实体类字段自动提示可用的方法名。

  2. 遵循步骤推导

    • 确定前缀 :根据操作类型选择 findBydeleteBy 等。
    • 列出条件属性 :按顺序拼接实体字段名(如 nameage)。
    • 添加条件关键字 :在属性后添加 GreaterThanLike 等(可选)。
    • 排序与分页 :添加 OrderByXxxAsc 或使用 Pageable 参数。
  3. 复杂查询用 @Query

    当派生方法名过长(超过 3 个条件)或逻辑复杂时,推荐使用 @Query 注解直接写 SQL。

六、示例对照表

需求描述 派生方法名
查询年龄大于 18 且名字包含 "张" 的用户 findByAgeGreaterThanAndNameLike(int age, String name)
删除状态为 "INACTIVE" 的用户 deleteByStatus(String status)
统计邮箱不为空的用户数 countByEmailNotNull()
查询用户名是 "admin" 或 "root" 的用户 findByUsernameIn(List<String> usernames)
查询最近注册的 10 个用户(按注册时间降序) findTop10ByOrderByRegisterTimeDesc()

七、注意事项

  1. 字段名严格匹配:属性名必须与实体类字段完全一致(包括大小写)。
  2. 避免深层嵌套 :关联查询建议不超过 2 层(如 user.address.city),否则用 @Query
  3. 性能问题 :复杂查询(如多表关联)使用派生方法可能生成低效 SQL,需通过 @Query 优化。
相关推荐
YCOSA20257 小时前
雨晨 Windows 10 企业版 LTSC x64 中度精简 1809 迎双节 17763.9257 特别版
windows
sukalot7 小时前
windows 驱动实例分析系列: HidHide 驱动分析 - drivers 篇(四)
windows·驱动开发
ι:13 小时前
NUC12 Pro 安装 Ubuntu 24.04 LTS 详细教程
linux·windows·ubuntu·nuc
YCOSA202513 小时前
微软宣布将于10月7日举行Windows与Surface发布会,聚焦“Windows、NVIDIA RTX Spark、Surface,以及更广泛PC生态”
windows
Source.Liu13 小时前
【A11】 labelprinter(Tauri 版)新建步骤
windows·rust
Punchline27814 小时前
解决 Windows 环境变量 Path 设置时提示“字符太长”的完整指南
windows·环境变量·path
chushiyunen15 小时前
claude code笔记(二)、claude桌面端(内网不好用)
windows
d_benhua15 小时前
以太网测试步骤
windows
冯一川16 小时前
DeepSeek在Windows系统上部署
windows·python
解道Jdon17 小时前
JDK 27发布:紧凑对象头、G1默认、量子安全TLS
ide·windows·git·svn·eclipse·github·visual studio