我正在使用 JDBC 开发一个 Java 项目,并且正在寻找从多个表中获取相关数据的最佳实践。给出以下类图:
我的用户、项目、估算、人工和材料实体具有以下关系:
一个用户可以有多个项目。 一个项目可以有多个估算。 项目与人工和材料具有一对多关系
使用 SQL 连接:使用连接在单个查询中获取所有相关数据,这种方法对于在单个代码块中分配对象的值非常有用。 单独的方法:首先获取用户数据,然后使用单独的方法获取相关项目,并在这些方法中获取估算和组件(人工和材料)
这是我想做的细节:
公共用户 getUser(int id) { //现在我需要向具有特定id的用户写入一条sql //用户有一个项目列表,所以我也需要将项目返回给用户 //每个项目都有一个或多个估计,因此我需要在返回用户之前获取每个项目的估计 //对于材料和劳动力来说也是如此,每个项目都包含两个劳动力和材料列表
每种方法的优缺点是什么?在典型的 Java 应用程序中为了可维护性和性能推荐使用哪一种方法?
我尝试使用分离的方法来确保一个类可以处理一项工作(单一责任原则),我也想让我的代码更干净并且分离得很好。我知道我可能会失去性能,但我不知道是否可以牺牲清洁度来换取性能。
通过将两个表连接在一起,您可以对数据进行非规范化。因此,如果将“项目”和“估算”表连接在一起,则每个估算的“项目”值将会重复。您加入的表越多,这个问题就会变得越大,因为您最终会在结果集中得到“笛卡尔积”。如果您将所有内容连接在一起,最终您的结果集将会变得很大,这会影响性能。 另一方面,您希望避免对每条记录进行查询,因为这需要向数据库服务器发出请求/响应。你需要小心避免
N+1 选择问题select * from user where user id = ?;
select * from product where user_id = ?;
select * from estimate where product_id in (...)
select * from labour where estimate_id in (...)
select * from material where estimate_id in (...)