当前位置: 首页 > 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实现更复杂的查询逻辑。

相关文章:

  • 解决在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地址的奇幻漂流
  • 洛阳哪里有做网站的/宝鸡网站开发公司
  • 合肥本地网站/百度怎么优化关键词排名
  • 江苏专业网站建设/品牌推广的概念
  • 中山中小型网站/营销是做什么
  • 上海网站定制设计图/新手怎么做电商运营
  • 网站页面大小优化怎么做/网络推广引流