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

如何在Spring JPA中通过WHERE子句查询指定行数据?

嘿,我来帮你搞定这个Spring JPA的查询问题!针对你要实现的SELECT * FROM user where name=agrawalo AND email=abc@example.com这个查询,Spring Data JPA有几种简单的实现方式,我给你一一说明:

先修正一个小细节

你的User实体类里userId是Long类型,但UserRepository继承JpaRepository时用了Integer作为ID泛型参数,这里得改成一致的,不然运行时会出现类型不匹配的错误:

public interface UserRepository extends JpaRepository<User, Long> {
    // 后续加查询方法
}

方法1:使用Spring Data JPA的查询方法(Query Methods)

这是最简洁的方式,完全不用写SQL,只需要按照Spring的命名规则定义方法名,框架会自动帮你生成对应的查询语句。

你只需要在UserRepository里添加下面这个方法:

public interface UserRepository extends JpaRepository<User, Long> {
    // 根据name和email查询用户,方法名里的And对应SQL中的AND
    User findByNameAndEmail(String name, String email);

    // 更推荐的写法:返回Optional避免空指针
    Optional<User> findByNameAndEmail(String name, String email);
}

调用的时候直接传入参数就行:

// 在Service或Controller中注入UserRepository后调用
Optional<User> user = userRepository.findByNameAndEmail("agrawalo", "abc@example.com");
// 处理结果
user.ifPresent(u -> {
    // 找到用户后的逻辑
});

Spring会自动生成对应的SQL,就是你想要的SELECT * FROM user WHERE name = ?1 AND email = ?2,参数顺序和方法的参数顺序一致。

方法2:使用@Query注解自定义查询

如果觉得方法名太长,或者需要更灵活的查询逻辑,可以用@Query注解直接写JPQL(面向实体的查询语言)或者原生SQL。

方式A:JPQL查询(推荐,与数据库无关)

public interface UserRepository extends JpaRepository<User, Long> {
    @Query("SELECT u FROM User u WHERE u.name = :name AND u.email = :email")
    Optional<User> findByCustomQuery(@Param("name") String name, @Param("email") String email);
}

这里:name和:email是命名参数,通过@Param注解和方法参数绑定,可读性更强。

方式B:原生SQL查询(直接操作数据库表)

如果你一定要用原生SQL(比如有数据库特定的语法),可以加上nativeQuery = true:

public interface UserRepository extends JpaRepository<User, Long> {
    @Query(value = "SELECT * FROM user WHERE name = :name AND email = :email", nativeQuery = true)
    Optional<User> findByNativeCustomQuery(@Param("name") String name, @Param("email") String email);
}

总结

  • 简单的条件查询优先用Query Methods,代码简洁易维护;
  • 复杂查询或者需要自定义SQL时用**@Query**注解;
  • 推荐返回Optional<User>而不是直接返回User,避免空指针异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:35:22