繁体   English   中英

Spring JPA 从 where 子句中选择

[英]Spring JPA selecting from where clause

我正在使用 Spring JPA 来执行所有数据库操作。 但是我不知道如何从 Spring JPA 的表中选择特定行(通过简单的 WHERE 子句连接)?

例如:

SELECT * FROM user where name=agrawalo AND email=abc@example.com 

用户类别:

@Entity
Class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long userId;

    @Column(nullable = false)
    private String name;

    @Column(nullable = false)
    private String email;

   // Getters and Setters
}

存储库:

public interface UserRepository extends JpaRepository<User, Integer> {

}

如果您使用spring-data-jpa则不需要为这些简单的事情编写查询。 您可以编写方法名称,spring-data 将根据您的方法名称制定查询并获取结果。

public interface UserRepository extends JpaRepository<User, Integer> {
  Optional<User> findByNameAndEmail(String name, String email)
}

创建一个类似上面的方法并使用所需的参数调用该方法。
如果您不想(不建议)使用Optional ,您可以只使用 User 作为返回类型。 在这种情况下,如果没有与您的参数匹配的条目,那么您将返回 null。

public interface UserRepository extends JpaRepository<User, Integer> {
     public User findUserByNameAndEmail(String name,String email);
}

实施将即时创建。

只需在存储库接口中声明以下方法,Spring-data-jpa 将负责实现

User findByNameAndEmail(String name, String email);

我知道我对此已经很晚了,但我仍然想提供另一种想要使用的解决方案。 当您认为由方法名称生成的查询没有达到您想要的目的并且您真的想编写本机查询时,这尤其有用。 为此,您实际上可以在存储库中使用 @Query 注释并将查询放入其中,如下所示:

@Query(value = "SELECT * FROM user where name = ?1 AND email = ?2", nativeQuery = true)
List<User> getUserByNameAndEmail(String name, String email);

这里@Query 告诉需要执行 value 属性中提供的查询,nativeQuery 属性告诉它是本机 sql 查询。

请注意, name 和 email 的值分别提供为 ?1 和 ?2 ,这意味着它们是占位符,将被 getUserByNameAndEmail 存储库方法在运行时在变量 name 和 email 中接收的参数替换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM