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

Spring Data JPA方法命名规则的完整总结,按场景分类整理

以下是Spring Data JPA方法命名规则的完整总结,按场景分类整理:

一、基础命名规则

  1. 方法前缀

    • find...:基础查询(默认返回实体列表或单个实体)
    • read...:等同于find,强调直接加载实体(JPA会尝试缓存)
    • query...:自定义复杂查询(需配合@Query注解)
    • count...:返回记录数(如countBy
    • exists...:返回布尔值(如existsById
  2. 条件组合符

    • By:条件分隔符(必选)
    • And/Or:多条件组合
    • 示例:findByAgeGreaterThanAndEmailLike

二、条件操作符

操作符对应SQL条件示例方法名
BetweenBETWEENfindByScoreBetween
LessThan<findByAgeLessThan
LessThanEqual<=findByAgeLessThanEqual
GreaterThan>findByScoreGreaterThan
GreaterThanEqual>=findByAgeGreaterThanEqual
After/Before日期比较findCreatedBefore
StartingWithLIKE ‘xxx%’findByUsernameStartingWith
EndingWithLIKE ‘%xxx’findByEmailEndingWith
ContainingLIKE ‘%xxx%’findByContentContaining
Is/Equals=findByStatusIs
IsNullIS NULLfindByAddressIsNull

三、排序与分页

  1. 排序

    List<User> findByAgeOrderByLastNameDesc(); // 先按年龄查询,再按姓氏降序排序
    
  2. 分页/限制

    List<User> findFirst10By(); // 返回前10条
    List<User> findTop3ByOrderByIdDesc(); // 按ID降序取前3
    

四、集合操作

  1. In/NotIn

    List<User> findByStatusIn(Collection<String> statuses);
    List<User> findByIdsNotIn(Long[] ids);
    
  2. Exists

    boolean existsByUsername(String username); // 返回布尔值
    

五、关联查询

  1. 嵌套属性

    List<Order> findByUser_Address_City(String city); // 通过User的Address的city属性查询
    
  2. 关联集合

    List<Post> findByComments_TextContains(String text); // 查询包含特定文本的评论关联帖子
    

六、返回类型

返回类型示例方法名说明
Optional<T>findById(Long id)可能为空的单个实体
List<T>findByStatus(String)多个结果列表
LongcountByEnabledTrue()计数查询
booleanexistsByEmail(...)存在性判断

七、特殊用法

  1. 忽略大小写

    List<User> findByNameIgnoreCase(String name); // 不区分大小写
    
  2. 正则表达式

    List<User> findByUsernameRegex(@Param("regex") String regex); // 使用`Regex`后缀
    

八、命名规则限制

  1. 不支持的场景

    • 需要JOIN多表的复杂查询(需用@Query)
    • 自定义聚合函数(如SUM, AVG
    • 需要自定义SQL方言的场景
  2. 命名冲突处理

    • 使用%占位符:findByStatusIn(%s)(需配合Specifications)
    • 使用Spec后缀:UserSpec配合@Query实现动态查询

九、最佳实践

  1. 方法名规范

    • 使用CamelCase且不加下划线
    • 避免使用保留字(如by不能作为开头)
  2. 性能注意

    • 避免生成N+1查询(需检查实际生成的SQL)
    • 复杂查询建议使用@Query显式声明

当命名规则无法满足需求时,可结合@Query注解或Specifications实现更复杂的查询逻辑。

http://www.dtcms.com/a/103776.html

相关文章:

  • 解决在pycharm下载的python在cmd命令行无法识别的问题
  • 蓝桥杯最后十天冲刺day 1
  • mysql表连接方式
  • MSYS2学习笔记
  • Unity 2022.3.x部分Android设备播放视频黑屏问题
  • 华为三进制逻辑与高维量子计算的对比分析
  • 微服务面试题:配置中心
  • Docker学习--容器生命周期管理相关命令--start/stop/restart命令
  • 装饰器模式:如何用Java打扮一个对象?
  • 安卓应用开发学习:查看手机传感器信息
  • 流量监控工具iptraf-ng学习
  • cisco单臂路由配置
  • 服务器是指什么,都有哪些用途?
  • python将pdf文件转为图片,如果pdf文件包含多页,将转化的多个图片通过垂直或者水平合并成一张图片
  • 状态模式_行为型_GOF23
  • UE5学习笔记 FPS游戏制作27 显示玩家血量
  • python3的多进程和多线程设计实现
  • 力扣刷题-热题100题-第28题(c++、python)
  • RabbitMQ快速上手
  • 22--交换安全与端口隔离完全指南:MAC地址的奇幻漂流
  • 查看pip3 是否安装了Flask
  • MySQL8.0.37组复制MGR配置详解
  • 零基础被迫参加CTF比赛?CTF高频解题技巧与经验分享
  • 深入了解 MySQL 锁机制
  • 饮料购物商城基于Spring Boot SSM
  • java 面试题记录
  • C++ 变量的声明与定义分离式编译与静态类型(十六)
  • 基于 SpringBoot 的火车订票管理系统
  • 万字长文详解Text-to-SQL
  • 从 0 到跑通的 Qt + OpenGL + VS 项目的完整流程