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 优化。
相关推荐
梦帮科技1 天前
Node.js配置生成器CLI工具开发实战
前端·人工智能·windows·前端框架·node.js·json
Lois_Luo1 天前
关闭Win10强制所有应用以管理员身份运行
windows
luoyayun3612 天前
实现Windows系统标题栏颜色跟随主题动态切换
windows·系统标题栏颜色·标题栏颜色
猫头虎2 天前
如何解决 OpenClaw “Pairing required” 报错:两种官方解决方案详解
网络·windows·网络协议·macos·智能路由器·pip·scipy
呉師傅2 天前
【使用技巧】Adobe Photoshop 2024调整缩放与布局125%后出现点菜单项漂移问题的简单处理
运维·服务器·windows·adobe·电脑·photoshop
梦帮科技2 天前
OpenClaw 桥接调用 Windows MCP:打造你的 AI 桌面自动化助手
人工智能·windows·自动化
春日见2 天前
如何创建一个PR
运维·开发语言·windows·git·docker·容器
C++ 老炮儿的技术栈2 天前
VS2015 + Qt 实现图形化Hello World(详细步骤)
c语言·开发语言·c++·windows·qt
浩浩测试一下2 天前
内网---> WriteOwner权限滥用
网络·汇编·windows·安全·microsoft·系统安全
一个人旅程~2 天前
Dell n4020双系统分区步骤和linux优化操作
linux·windows·电脑