gpt4 book ai didi

java - 在不使用 ORM 和直接使用 JDBC(或同等技术)的情况下,如何处理这些常见问题?

转载 作者:太空宇宙 更新时间:2023-11-04 08:55:56 24 4
gpt4 key购买 nike

当仅使用 JDBC 时,我通常必须考虑以下问题。我不会想太多,只是让一些东西发挥作用,但我想知道人们如何在没有 ORM 或其他库的情况下处理这些。

  1. 急切加载与延迟加载:您是否只有一个域对象,并且让依赖的子对象为空,并让调用者有责任在需要时调用 DAO 来加载这些子对象?或者您只是对同一个域对象使用多个传输对象?这也意味着您必须为急切情况和惰性情况维护单独的 SQL 查询。

  2. 域对象和传输对象:您甚至需要域对象和传输对象吗?对于上述情况,通过传输对象使用域对象的不同表示可能更容易完成。最后,如果使用传输对象,相关对象是否会“分离”?换句话说,如果您有一个包含多个子级的 Parent 类,那么 Parent 是否有子级集合的实例,或者是否会单独请求这些实例?

  3. 分配 ID:到目前为止我所做的就是捆绑一个事务,然后在最后分配 id。但是,这需要一个公共(public)函数来设置 id...

  4. 级联:我想唯一的选择是手动执行此操作...

还有更多,但我现在能想到的就这些了。<​​/p>

编辑:至于我为什么问这个问题,你知道有些开发团队如何“害怕”使用 ORM 或者出于某种原因不喜欢它们(通常是因为他们不理解它们),所以有时 JDBC 是你唯一的选择......

最佳答案

最重要的是,每个问题都有不同的解决方案,适合您的解决方案将取决于具体情况:没有一种放之四海而皆准的方法。

以第三个为例,我们有一个表,为每种类型维护一个唯一的 id 计数器(每个实体类型一行):当您需要 id 时,选择类型的当前值,然后在数据库中递增它。这个解决方案很简单,但扩展性不太好:如果你想改进它,那么你可以让应用程序层批量分配这些 id 的负载(例如每种类型一次 50 个),然后在插入新数据时根据需要分发它们,仅在数据库池耗尽时才返回到数据库。这本质上是对类似 Oracle's sequences 的模拟。 .

对于第四点,与另一个实体类型有关系的每个实体类(包装单个表的类)负责级联删除等。

最终,ORM 只是一个抽象,所以如果你深入了解一下,所有这些问题都已由库实现者解决了。在这种情况下,你只需要跑腿!

关于java - 在不使用 ORM 和直接使用 JDBC(或同等技术)的情况下,如何处理这些常见问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2297294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com