从 Spring Boot 中只有客户拥有的数据库中获取数据的正确方法

Posted

技术标签:

【中文标题】从 Spring Boot 中只有客户拥有的数据库中获取数据的正确方法【英文标题】:Correct way to get data from database that only the customer owns in Spring Boot 【发布时间】:2021-01-18 15:35:12 【问题描述】:

我正在用 Spring Boot 编写我的第一个应用程序,如果这是一个愚蠢的问题,我很抱歉。 我在数据库中有一个“客户”表和一个以 customer_id 作为外键的“建筑”表,所以我知道哪些客户拥有哪些建筑物。 据我现在了解,存储库文件夹中应该是 BuildingRepository.java,它处理与数据库构建表的通信。我在那里写了“getAll()”方法,但它返回所有建筑物的列表,而不管 customer_id 是什么。然后我有 BuildingServiceImpl.java,它是 REST API 端点下面的“层”,它也有 getAll() 方法来返回所有建筑物。我应该将 customer_id 指定为存储库中的参数,还是应该在 serviceImpl 中指定它以严格保留存储库以进行基本数据库交互,以便仅返回客户拥有的建筑物?

这是 BuildingRepository.java 中的 getAll() 方法

public List<Building> getAll() 
    final String sql = "select * from building";
    return jdbcTemplate.query(sql, buildingRowMapper);

这是 BuildingServiceImpl.java 中的 getAll() 方法

public List<Building> getAll() 
    return buildingRepository.getAll();

【问题讨论】:

【参考方案1】:

尝试以下查询之一 "select * from building b left join customer c on b.customer_id=c.customer_id""select * from building,customer c where b.customer_id =c.customer_id"

如果您需要返回特定列,您始终可以使用返回类型作为 List 和服务层,您需要将它们类型转换回相应的数据类型。如果您需要该查询,请告诉我,我会为您提供相同的查询。

【讨论】:

感谢您的回答,但我知道如何编写查询。让我更清楚地问这个问题。我只想过滤掉具有正确 customer_id 的建筑物。我应该在存储库中还是在服务层中这样做? 选择性数据总是比聚合数据更快、更高效,但有时我们需要在不同的进程中使用不同的相同数据集,在这种情况下,java过滤(在服务层)更有效。

以上是关于从 Spring Boot 中只有客户拥有的数据库中获取数据的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot API - 从客户端发布完整数据

Consul on Docker Swarm 与 Spring Boot 客户端

Spring Cloud:构建微服务 - Spring Boot

我想创建一项服务,允许我公司的产品仅为客户拥有的产品移动页面

如何使用 Spring Boot 在 Mongo 中存储原始 JSON

连接 HSQLDB 服务器