更新用户资源上的GET方法以使用JPA

在本主题中, 我们将创建一个检索所有用户的服务。
尽管如此, 我们仍在使用UserResource, 它与内存对话。现在, 我们将创建一个新的UserResource, 它将与嵌入式数据库对话。让我们创建一个新的用户资源。
步骤1:复制UserResource.java文件并将其粘贴到用户包中。用UserJPAResource重命名。
步骤2:现在, 我们有两个具有相同名称的URI, 它们会产生冲突。要消除此冲突, 我们将在UserJPAResource.java文件中添加/ jpa。
UserJPAResource.java

package com.srcmini.server.main.user; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.*; import java.net.URI; import java.util.List; import javax.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.hateoas.Resource; import org.springframework.hateoas.mvc.ControllerLinkBuilder; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.support.ServletUriComponentsBuilder; @RestControllerpublic class UserJPAResource {@Autowiredprivate UserDaoService service; @GetMapping("/jpa/users")public List< User> retriveAllUsers(){return service.findAll(); }@GetMapping("/jpa/users/{id}")public Resource< User> retriveUser(@PathVariable int id){User user= service.findOne(id); if(user==null)//runtime exceptionthrow new UserNotFoundException("id: "+ id); //"all-users", SERVER_PATH + "/users"//retrieveAllUsersResource< User> resource=new Resource< User> (user); //constructor of Resource class//add link to retrieve all the usersControllerLinkBuilder linkTo=linkTo(methodOn(this.getClass()).retriveAllUsers()); resource.add(linkTo.withRel("all-users")); return resource; }//method that delete a user resource@DeleteMapping("/jpa/users/{id}")public void deleteUser(@PathVariable int id){User user= service.deleteById(id); if(user==null)//runtime exceptionthrow new UserNotFoundException("id: "+ id); }//method that posts a new user detail and returns the status of the user resource@PostMapping("/jpa/users")public ResponseEntity< Object> createUser(@Valid @RequestBody User user) {User sevedUser=service.save(user); URI location=ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}").buildAndExpand(sevedUser.getId()).toUri(); return ResponseEntity.created(location).build(); }}

但这并不是在与数据库对话。我们需要创建一个spring数据存储库。
步骤3:创建一个名称为UserRepository的接口, 该接口扩展了JpaRepository。指定必须管理的实体。我们指定了用户和整数。现在我们已经准备好UserRepository。
UserRepository.java
package com.srcmini.server.main.user; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repositorypublic interface UserRepository extends JpaRepository< User, Integer> {}

步骤4:创建UserResource的使用。我们已经自动连接了UserJPAResource类中的UserRepository接口。
@Autowiredprivate UserRepository userRepository;

步骤5:在retriveAllUsers()方法中返回userRepository.findAll()。
@GetMapping("/jpa/users")public List< User> retriveAllUsers(){return userRepository.findAll(); }

retriveAllUsers()是从嵌入式数据库检索数据的唯一方法, 所有其他方法都从静态数组列表中检索数据。
步骤6:打开邮递员。输入URI http:// localhost:8080 / jpa / users并发送GET请求。它显示了从嵌入式数据库获取的所有数据。
更新用户资源上的GET方法以使用JPA

文章图片
再次发送带有URL http:// localhost:8080 / jpa / users / 1的GET请求。它返回指定的用户ID(即1), 但它从内存中提取数据。
但是我们需要从嵌入式数据库中获取数据。我们需要在UserJPAResource.java中更改以下服务。
@GetMapping("/jpa/users")public List< User> retriveAllUsers(){return userRepository.findAll(); }

在以下服务中, 无论user为null还是非null, findById()都会返回User的Option。每当我们使用findById()时, 就有两种可能性:id存在或不存在。如果不存在, 它将带有一个适当的对象。我们将通过if(!user.isPresent())语句检查用户是否存在。如果用户不存在, 则会引发异常。
@GetMapping("/jpa/users/{id}")public Resource< User> retriveUser(@PathVariable int id){Optional< User> user= userRepository.findById(id); if(user.isPresent())//runtime exceptionthrow new UserNotFoundException("id: "+ id); //"all-users", SERVER_PATH + "/users"//retrieveAllUsersResource< User> resource=new Resource< User> (user.get()); //constructor of Resource class//add link to retrieve all the usersControllerLinkBuilder linkTo=linkTo(methodOn(this.getClass()).retriveAllUsers()); resource.add(linkTo.withRel("all-users")); return resource; }

【更新用户资源上的GET方法以使用JPA】再次发送带有URL http:// localhost:8080 / jpa / users / 1的GET请求。它返回一个指定的用户以及/ jpa / users的链接。
{"name": "John", "dob": "2019-10-01"T0726:52.596+0000", "_links": {"all-users": {"href": "http://localhost:8080/jpa/users"}}}

    推荐阅读