Spring JPA从where子句中选择

时间:2018-05-28 11:04:18

标签: java jpa spring-data-jpa

我正在使用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> {

}

4 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:1)

只需在存储库界面中声明以下方法,就可以实现Spring-data-jpa的实现

User findByNameAndEmail(String name, String email);

答案 2 :(得分:1)

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

将实时创建实施。

答案 3 :(得分:1)

我知道我已经很晚了,但我仍然想提供另一种想要使用的解决方案。当您认为由方法名称生成的查询没有达到您想要的目的并且您真的想编写本机查询时,这特别有用。为此,您实际上可以在存储库中使用 @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 中接收的参数替换。