尝试在 Java Spring Boot 中从 H2 数据库中获取相关实体

Posted

技术标签:

【中文标题】尝试在 Java Spring Boot 中从 H2 数据库中获取相关实体【英文标题】:Trying to get related entities from H2 database in Java Spring Boot 【发布时间】:2020-07-12 02:31:17 【问题描述】:

我刚刚开始学习 Spring Boot,并且正在使用 H2 数据库,我几乎可以正常工作,但是我在尝试提出稍微复杂一点的请求时遇到了麻烦。我有 2 个表“用户”和“购买”,我想创建一个端点来返回包含给定用户 ID 的所有购买。如果我使用 SQL 连接或一些类似的查询,这似乎很简单,但我不知道如何实现。

我有一个用于用户和购买的存储库 (CrudRepository),然后为每个用户提供一个从数据库获取相关数据的服务。这非常适合 get、getById 等基本需求。但我不知道如何指定诸如 join 之类的查询。

public interface UserRepo extends CrudRepository<User, Integer> 

public interface ReceiptRepo extends CrudRepository<Receipt, Integer> 

@Service
public class UserService 
    @Autowired
    UserRepo userRepo;
 
    public User getUser(int id)  return userRepo.findById(id).get(); 


@RestController
public class UserController 
    @Autowired
    UserService userService;

    @GetMapping("/user/id")
    private User getUser(@PathVariable("id") int id) 
        return userService.getUser(id);
    

这基本上是两个实体的设置,我不确定在哪里以及如何编写更具体的查询。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

Yoy 可以使用@Query() 注释来编写查询。 您需要在您的 repo 中声明一个方法,并在该方法上放置此注释。

例如:

@Query("SELECT u FROM User u WHERE u.status = 1")
Collection<User> findAllActiveUsers();

您可以通过here 了解更多信息

【讨论】:

啊,好吧,我明白了,如果我在 repo 中定义了查询,我将如何将 id 传递给它。例如,如果请求正文包含有问题的 id,我将如何将 id 获取到 repo 方法 @Query("SELECT u FROM User u WHERE u.status = ?1") User findUserByStatus(Integer status); @Query("SELECT u FROM User u WHERE u.status = ?1 and u.name = ?2") User findUserByStatusAndName(Integer status, String name); 你可以查看链接,在那里你会得到所有的信息

以上是关于尝试在 Java Spring Boot 中从 H2 数据库中获取相关实体的主要内容,如果未能解决你的问题,请参考以下文章

无法在 spring-boot 应用程序中从 Consul 读取配置

在 Spring Boot 中从文件加载 SQL 触发器

如何在 Spring Boot 中从 MongoDb 中仅读取特定的 JSON 节点

在 Spring Boot 中从 Angular 向后端发送 post 请求中的对象的问题

如何在 Spring Boot 应用程序中从数据库表中填充实体

在 Eclipse 中从 Spring:boot 项目创建 war 文件