首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在访问数据库的Java动态web应用程序中管理表关系,而不使用任何框架

在访问数据库的Java动态web应用程序中管理表关系,而不使用任何框架
EN

Software Engineering用户
提问于 2019-05-08 16:53:20
回答 1查看 575关注 0票数 0

我正在开发一个用于学术目的的网络应用程序。

我要做的是一个简单的网站,跟踪房地产与他们各自的所有者和标签,他们是必然的。

应用程序从MySQL数据库获取数据,必须包括以下特性:

  • 列出所有不动产
  • 列出具有特定标记的所有不动产。
  • 列出特定所有者实体拥有的所有不动产。
  • 列出由特定所有者拥有并带有特定标记的所有房地产。

需要使用JDBC连接到数据库,使用JSP/Servlet创建动态页面,(可选地)使用Java显示属性(使用useBean或JSTL/EL),而不使用框架。所有事情都必须用纯Java来完成。

它不是一个复杂的应用程序,它只是为了学术目的,这也意味着我不需要考虑任何可伸缩性问题。我可以简单地将数据库连接和查询的代码作为脚本放在JSP页面中,并称之为一天。

然而,我真正想做的是遵循MVC模式,并学习如何编写整洁的代码。

,这是我想遵循的方法:

  • JSP页面形成视图层,只包含HTML和JSTL来访问模型
  • 该模型由Java组成。每个JB代表一个具有各自列的表。
  • Servlet使控制器层。他们从包含数据库查询的Service类调用方法,并通过向JSP发送请求,在视图层发送结果Java。

--这就是我构造表的方式:

代码语言:javascript
复制
Realties
-----------------
(pk) id
surface_area
rooms_number
year
price
(fk) owner

Owners
-----------------
(pk) id
name
surname

Tags
-----------------
(pk) id
title  


realties_xref_tags
-----------------
(pk)(fk) realty_id
(pk)(fk) tag_id  

房地产和所有者表之间有多对一的关系,房地产和标签表之间有多到多的关系(房地产可以有一个标签列表)。

这些是Beans,除了realties_xref_tags之外,每个表都有一个Beans。(省略了Getters和setter)

代码语言:javascript
复制
public class Realty implements Serializable {

    private BigInteger id;
    private double surface_area;
    private int rooms_number;
    private int year;
    private BigDecimal price;
    private BigInteger owner_id;
}

public class Owner implements Serializable {

    private BigInteger id;
    private String name;
    private String surname;
}

public class Tag implements Serializable {

    private BigInteger id;
    private String title;
}

在这里,我遇到了麻烦,试图找出最好的方式来管理关系。

  • Realty bean应该使用一个包含外键的字段来跟踪其所有者,还是应该保存对与该外键相对应的实际Owner对象的引用?我知道,对于大量的属性或条目,后一种选择可能不是最优的。
  • 如何避免为同一个Owner实体实例化重复Beans?考虑一个有10个房地产和4个业主的场景。有一些拥有相同所有者的实体,但是应用程序在尝试获取所有条目时仍然会实例化10个Owner bean:我只是有这样的想法:在Service的查找条目的方法中创建一个HashMap<BigInteger, Owner> map可以吗,这样它就调用map.get(ownerId),然后只有当返回null时才执行SELECT查询?
  • 我应该为List<String>类中的标记创建一个Realties字段吗?

我应该采取哪种方法来处理DTO中的关系,以便在(小型)实际项目场景中产生良好的实践?

EN

回答 1

Software Engineering用户

发布于 2019-05-10 07:52:07

对此的答案必然是固执己见的。在你的例子中,因为正如你说的,你不需要担心缩放,任何事情都有效,真的。

我对它的看法是:宁愿在模型中公开it而不是对象。

推理:

  • 代码的任何部分都可以调用SomeEntity.getById()
  • 如果您有更复杂的非CRUD类型查询,比如动态记录范围上的聚合,那么将它们作为特例编码在可维护性方面是最有效的。
  • 如果您不“保持简单”,并且您的应用程序不断增长,那么最终您将重新发明对象关系映射器的一个破碎的实现。
票数 2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/391617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档