首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JDBC领域设计与关系

JDBC领域设计与关系
EN

Stack Overflow用户
提问于 2015-09-11 19:24:50
回答 1查看 200关注 0票数 0

我以前使用过Hibernate / JPA,现在使用Spring和MyBatis的组合。

有了JPA/ Hibernate,如果您有一个客户,并且有一个地址,您将有一个与下面的代码类似的域结构。(减去所有注释/ config /映射)。

在使用JDBC或MyBatis时,这仍然有意义吗?这是组合域设计,据我所知,有-a,属于,等等。然而,我见过的关于JDBC代码的大多数例子,它们都有域对象,它们可以返回ID,而不是收集,或者使数据变平。这两种方法、可维护性等都有性能上的好处吗?首先使用JPA后,我不确定JDBC的处理方法是什么。

代码语言:javascript
复制
public class Customer {

    private Long id;
    private String userName;
    private String password;
    private String firstName;
    private String lastName;
    private Collection<Address> addresses
    ...
}

public class Address {
    private Long id;
    private String streetAddress1;
    private String streetAddress2;
    private String city;
    private State state;
    private String postalCode;
}

public class State {
    private Long id;
    private String code;
    private String name;
    private Country country;
}

public class Country {
    private Long id;
    private String code;
    private String name;
}

我遇到了一个例子,这是他们的一个班级。

代码语言:javascript
复制
public class Question {
    private long questionId;
    private long categoryId;
    private long userId;
    private long areaId;
    private String question;
    private String verifyKey;
    private Date created;
    private User user;
    private List<Answer> answers;
    private long answerCount;
    private String name;
    // getters and setters omited...
}

为什么要获取userId、areaId和categoryId而不是实际获取关联的对象?对于前端用户来说,这个ID可能没有用,我想您可以使用ID发出另一个查询来获取其他数据,但是对数据库进行另一次往返似乎效率很低。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-14 01:43:04

您可以将此域对象视为数据库表的“占用空间”。在您的示例中,userId、areaId和Question中的categoryId很可能是对应表中的外键。在创建问题的时刻,您永远不可能需要完整的对象数据,然后使用单独的db请求检索它。如果一次获取所有相关对象,则每个对象至少会有一个额外的表(通过联接-s或子选择-s)。而且,这实际上和Hibernate是一样的。默认情况下,它延迟加载域对象,如果需要未初始化的关联对象,则再次命中数据库。

在那个时候,最好是获取那些域对象不能存在的对象。在您的示例中,问题和列表是耦合的。

当然,如果在另一个应用程序中再次需要用户、类别或任何其他关联对象(假设以前检索到的对象的引用已经丢失),您将使用相同的查询访问数据库。应该这样做,而且看起来效率很低,因为普通的JDBC和SpringJDBC都没有中间缓存,与Hibernate不同。但这并不是JDBC设计的目的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32530780

复制
相关文章

相似问题

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