You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot JPA如何创建带WHERE条件的查询方法?

Spring Boot JPA 方法实现带条件查询示例

Spring Data JPA的方法命名查询是最直接的实现方式,完全不用写@Query就能搞定你要的两个需求,核心是遵循它的命名约定:

1. 获取指定地点对应的所有部门

假设你的部门实体类Department里有一个名为location的字符串属性(用来存储地点信息),直接在Repository接口里定义如下方法即可:

import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;

public interface DepartmentRepository extends JpaRepository<Department, Long> {
    // 根据地点查询所有部门
    List<Department> findByLocation(String location);
}

调用时直接传入地点参数,JPA会自动生成WHERE location = ?1的SQL语句。如果你的地点属性名是其他(比如officeAddress),方法名改成findByOfficeAddress就行,严格对应实体类的驼峰属性名。

2. 获取分配给指定用户的所有客户

分两种常见场景:

  • 场景一:客户实体Customer里直接存储了用户ID(比如userId字段)
    定义方法:
    import org.springframework.data.jpa.repository.JpaRepository;
    import java.util.List;
    
    public interface CustomerRepository extends JpaRepository<Customer, Long> {
        List<Customer> findByUserId(Long userId);
    }
    
  • 场景二:客户实体和用户实体是关联关系(比如Customer里有User类型的assignee属性)
    可以直接用关联对象或关联对象的ID查询:
    // 通过用户对象查询
    List<Customer> findByAssignee(User user);
    
    // 通过用户ID查询(更常用,避免加载整个User对象)
    List<Customer> findByAssigneeId(Long userId);
    

额外说明

  • 方法前缀用findBy、getBy、readBy都可以,效果完全一致
  • 如果需要其他条件(比如模糊查询、范围筛选),可以在属性名后加对应关键字,比如findByLocationLike(String locationPattern),但你要的精准匹配用上面的基础方法就足够
  • 要是遇到复杂查询场景,你已经了解的@Query注解也可以配合使用,比如:
    @Query("SELECT d FROM Department d WHERE d.location = ?1")
    List<Department> getDepartmentsByLocation(String location);
    

内容的提问来源于stack exchange,提问作者Abrar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 13:03:32