ORM框架中的一些概念问题

1.ORM里的Entity类 对应着 数据库里的表吗
2.那么Entity对象 对应着什么呢? 我看的几个示例都是好像把Entity对象的集合作为一个查询结果集来进行遍历,所以说Entity对象实际上是作为一个数据库里的row?

补充提问:
3.学习ORM之前是不是得先学学JDBC

阅读 1.4k
1 个回答

【问题一 & 二】

不一定,取决于你使用的 ORM 能干什么。毕竟是个“Mapping”,那么能映射到什么程度,都是可以的。

有一些 ORM 只是提供了 Lambda/QueryBuilder 之类的的写法,避免了你手动拼 SQL。这种 ORM 那就是 Entity 类就是和数据库表一一对应的,除了提供了个强类型约束(弱类型语言里甚至连这个都没有)以外就没别的了。这种就是最简单的 Mapping。

另一部分 ORM 会带有“导航属性/对象导航”之类的功能。这种的就可能一个 Entity 类对应一张表;也可能一个 Entity 类对应多张表;还可能多一个 Entity 类对应一张表。

举个例子(以下都是伪代码)——

假设存在两张表“部门”和“员工”:

CREATE TABLE `department` {
    `id` INT PRIMARYKEY,
    `name` VARCHAR
}

CREATE TABLE `staff` {
    `id` INT PRIMARYKEY,
    `name` VARCHAR,
    `department_id` INT
}

在带有“导航属性/对象导航”功能的 ORM 框架中,你可以直接定义 Entity 类为:

class Department {
    int id;
    String name;
    Staff[] staff;
}

class Staff {
    int id;
    String name;
    Department department;
}

注意到特殊的地方了吗?

这是比较主要的区别。事实上还会有很多区别,但都相对来说比较依赖 ORM 的具体实现,而非共同的区别,所以就不在这里一一列举了。

P.S. 初学者建议先别纠结这些概念上的东西,概念会有助于你加深理解,却对上手无甚帮助。等到你会用了以后再了解这些也不迟。


【问题三】

一般情况下不需要你手动调用 JDBC,但了解底层实现有助于你更好地掌握并掌握上层框架。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题