如何在Spring Data JPA中搜索[FieldName]

时间:2019-04-09 15:18:07

标签: mysql spring hibernate jpa

我是Spring框架的新手。我坚持使用基本的CRUD功能。我正在尝试搜索用户名,然后确定输入的密码是否正确。目前,我试图至少只是在我的实体中查找特定的用户名。如何在Spring JPA中做到这一点?我只能使用ID进行搜索,而不能使用FieldNames。我想在Service中像这样实现它。 列出findCredentialsByUsername(String username);

然后在我的控制器中调用此服务,我将使用邮递员/浏览器网址来搜索用户名。

然后,Controller中的方法将具有以下内容 certificateRepository.findCredentialsByUsername(用户名); 那不是使用查询,只是基本的JPA方法。

只要找到,它将返回true或至少为我提供该用户名的详细信息。

我有以下实体。

@Entity
public class Credentials {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long id;

@Column
String username;
@Column
String password;
@Column
String firstname;
@Column
String lastname;

public Long getId() {
    return id;
}

//ToString , Getters and Setters
//Needed for returning the changes on POSTMAN
@Override
public String toString() {
    return "Credentials{" +
            "username='" + username + '\'' +
            ", password='" + password + '\'' +
            ", firstname='" + firstname + '\'' +
            ", lastname='" + lastname + '\'' +
            '}';
}

public void setId(Long id) {
    this.id = id;
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public String getFirstname() {
    return firstname;
}

public void setFirstname(String firstname) {
    this.firstname = firstname;
}

public String getLastname() {
    return lastname;
}

public void setLastname(String lastname) {
    this.lastname = lastname;
}

}

我的Controllers,Services和Repository真是一团糟。我无法完全掌握Spring数据JPA这个东西的构造块吗?几天来,我一直在使用CRUD来爬网JPA的基本构建块。 :/

PS:

  

密码在数据库上未加密。对于基本的Spring JPA,我只是想做一个基本的Search / CRUD。   没有创建Web UI,我只是通过Postman对我的CRUD功能进行测试

1 个答案:

答案 0 :(得分:1)

您正在寻找查询方法,只需使用字段名称

赋予的关键字 findBy

示例: findBy 用户名(字符串用户名)

Query methods section for more information

因此,您只需要创建扩展 JpaRepository CrudRepository 界面

@Repository
public interface CredentialsRepository extends JpaRepository<Credentials, Long> {

  Optional<Credentials> findByUsername(String username);

}

然后是您的控制器:

@RestController
public class CredentialsController {

  @Autowired
  CredentialsRepository credentialsRepository;

  @GetMapping("/check/{username}")
  public String check(@PathVariable("username") String username) {

   Optional<Credentials> credentials = CredentialsRepository.findByUsername(username);

   return credentials.isPresent() ? "exist" : "doesn't exist"; 

  }

}