Spring Data JPA基本方法调用规律

一、命名规则核心逻辑

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

  1. 前缀(固定关键词) :findBy、deleteBy、countBy、existsBy 等。
  2. 属性名:实体类的字段名(需严格匹配驼峰命名)。
  3. 条件 :可选,如 GreaterThan、LessThan、Like 等。

示例:

复制代码
// 方法名       = 前缀 + 属性名 + 条件
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. 遵循步骤推导

    • 确定前缀 :根据操作类型选择 findBy、deleteBy 等。
    • 列出条件属性 :按顺序拼接实体字段名(如 name、age)。
    • 添加条件关键字 :在属性后添加 GreaterThan、Like 等(可选)。
    • 排序与分页 :添加 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 优化。
相关推荐
在角落发呆3 小时前
软件配置备份方法:从手动到自动化的实践指南
windows·安全
lingchen19063 小时前
Win 11 系统语言栏悬浮于桌面上影响操作感受,怎么取消?
windows
梅孔立4 小时前
Windows PowerShell 升级 Pi-Coding-Agent + OpenCode,解决 OpenCode 二进制无效报错
windows
东木月6 小时前
Windows C 盘清理指南:安全删除临时文件、缓存与 Prefetch
c语言·windows·安全
水饺编程7 小时前
第1章,[Win32 章节]:Windows 的方方面面
c语言·c++·windows·visual studio
超级大福宝8 小时前
VS Code Remote-SSH 因 RemoteForward 端口冲突导致连接失败的排查与解决
运维·服务器·windows·vscode·ssh
Vex2une8 小时前
Windows PowerShell 发展史:从命令行工具到自动化核心
windows·自动化运维·命令行·powershell·cmd·脚本语言·对象管道
怎么没有名字注册了啊20 小时前
Qt开发:MessageBox怎么调出标题栏那个问号按钮?
windows
李子红了时21 小时前
EncFS MP中文版汉化下载(免费文件加密工具)
windows·安全
辻弋20121 小时前
五年前的旅行视频糊成马赛克?Video2X用Real-ESRGAN逐帧重建细节,但只支持Windows、集显用户建议直接放弃
服务器·数据库·windows·游戏引擎·电脑