当前位置: 首页 > news >正文

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逻辑与findByNameAndAgeWHERE name = ? AND age = ?
Or逻辑或findByNameOrAgeWHERE name = ? OR age = ?
GreaterThan大于findByAgeGreaterThanWHERE age > ?
LessThan小于findByAgeLessThanWHERE age < ?
Between在区间内findByAgeBetweenWHERE age BETWEEN ? AND ?
Like模糊匹配findByNameLikeWHERE name LIKE ?
IgnoreCase忽略大小写findByNameIgnoreCaseWHERE UPPER(name) = UPPER(?)
OrderBy排序findByNameOrderByAgeDescWHERE name = ? ORDER BY age DESC
IsNull / NotNull空值判断findByEmailIsNullWHERE email IS NULL
In / NotIn包含 / 不包含findByAgeInWHERE 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 优化。
http://www.dtcms.com/a/269136.html

相关文章:

  • web渗透之指纹识别1
  • Shader面试题100道之(1-20)
  • PX4无人机上的返航操作和参数解读
  • 华为OD机试 2025B卷 - 最长的指定瑕疵度的元音子串 (C++PythonJAVAJSC语言)
  • DCN2:大规模推荐系统中的碰撞权重与显式交叉层协同优化
  • C++ tcp客户端处理重连问题
  • 3S技术+ArcGIS/ENVI全流程实战:水文、气象、灾害、生态、环境及卫生等领域应用
  • 前端工程化速通——①ES6
  • OSPF路由过滤实验案例
  • severb
  • 大模型通用架构图
  • es性能优化
  • 国产ARM+FPGA工业开发平台——GM-3568JHF
  • LeetCode 151. 反转字符串中的单词
  • 软考(软件设计师)存储管理—存储空间管理,文件共享保护
  • 虚幻引擎Gameplay框架
  • STM32固件升级设计——串口IAP升级(基于YMODEM协议)
  • CosyVoice2.0整合包:免费一键启动,释放语音克隆的创意潜能
  • day048-系统负载高排查流程与前后端分离项目
  • 上传Vue3+vite+Ts组件到npm官方库保姆级教程
  • python高级变量XIV
  • 【数据结构之哈夫曼树与编码实现】
  • 【Linux操作系统】简学深悟启示录:Linux基本指令
  • OpenStack扩展
  • 05. study_JSBridge机制
  • 7.7日 实验03-Spark批处理开发(2)
  • Playfun即将开启大型Web3线上活动,打造沉浸式GameFi体验生态
  • C++11标准库算法:深入理解std::none_of
  • 低代码平台的性能测试实践与挑战
  • qiankun 微前端项目中的 Token 鉴权方案