`
wsc830719
  • 浏览: 166087 次
  • 性别: Icon_minigender_1
  • 来自: 唐山
社区版块
存档分类
最新评论

使用ORM框架时,用外键好还是不用外键好呢?

阅读更多

这几个月,我都在用JPA做练习,除非就几个表,我才用JDBC直接访问。使用映射框架能够节省很多代码量,首先那些烦人的数据库表的字段再也不用一个个的写了。确实是映射框架能极大的提高开发效率,这在自己的实践中也证实了。不过前提是IDE的代码生成,如果没有IDE的代码生成,那也是比较麻烦的。

        在使用的过程中,自己都是建好外键,尤其,我写一个OA时,使用了powerdesigner设计了下数据库,然后建立外键,然后生成SQL语句,最后导入数据库,接着借助IDE生成实体类。

        第一 那些外键就会以多对一的形式体现出来,此时一方引用着唯一的另一方,而另一方表现为一个集合的方式引用前者,但是很多时候,我查询的数据都是带很多条件的,它这个一对多引用的集合,很多情况下,并不会用。当然默认情况下它是延迟加载的,也就是直到访问时才去真正从数据库里查询。

        反过来,如果不使用外键的话,自己去设置自己需要的集合就可以了,此时通过一定的数据库访问方法获得,并设置其值。

       第二,在页面中,如果显示数据,借助外键,只需查询一个对象就可以了 就是用find方法,然后集合可以直接在页面用JSTL获得。但是有时候更新时,往往不同步,于是更新完后必须flush下,才行。

      反过来,不使用外键,就不会涉及数据同步问题了,因为实体间关系靠程序自己分辨,而不用映射框架去映射。

      第三,使用外键时,如果一个实体的集合字段的某个需要更新或删除时,尤其大量的操作这个实体的List时,List变了,提交后,自动同步到数据库,处理时能节省好多代码。

      反过来,不使用外键,可就真需要自己去维护这些从属关系了,当然了也不是很麻烦。

      第四,使用外键时,那些外键就以对象形式体现了,被引用主键的那个实体,必须查询出来后,才能set进入当前的实体,因此要多出好多查询,虽然,很多时候可以从缓存中拿到,而不是去数据库里现取,但总感觉很占用内存。

      反过来,不使用外键,有ID字段的int值就可以set了,而不用查询出那个对象。

其实拿id构造一个对象也是可以的,因为这个时候真正需要的其实就是这个对象的ID字段,netbeans在生成实体类时都肯定有个带主键的构造器。从另一方面讲,之所以查询一下,可以确认该对象还存在否,如果不存在,可以确认目前合理不合理。

最后,JPA在初始化时cpu会100%几秒,只要修改了类文件后,涉及到访问数据库的操作,就会发生。感觉sun出品的框架都很重量级,尤其EJB更是如此。不过JPA真的很方便快捷。当然了这应该算作是hibernate的功劳,是hibernate引领了如此美妙的ORM。

综上考虑,我下一步也不使用外键了,这样不用考虑什么多对多、多对一关系,好像更像封装的JDBC了,呵呵!

不知道效果如何,前几天下了JSPRun的一个论坛项目,它里面就是没用外键,hibernate的映射配置文件非常简洁,就是和数据库的直接映射,然后具体的逻辑关系全在代码中自己维护!

       今天写到这,明天开始体验!

分享到:
评论

相关推荐

    django orm 外键操作-练习示例

    在 Django 框架中,ORM (Object-Relational Mapping) 是一种强大的工具,它允许开发者用 Python 对象来操作数据库,而无需直接编写 SQL 语句。外键(Foreign Key)是数据库关系中的一种机制,用于在一个表中引用另一...

    Hibernate ORM - 一对一外键关联关系

    在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者用面向对象的方式处理数据库操作,从而减少与SQL的直接交互。"一对一(One-to-One)"外键关联是Hibernate支持的一种关系映射类型,...

    orm框架的底层实现机制共.pdf

    理解ORM框架的底层实现机制对于开发人员来说非常重要,它可以帮助我们更好地优化代码,理解框架的工作原理,并在必要时自定义或扩展ORM框架。尽管市场上有许多ORM框架,但其核心概念和机制大多相似。掌握了基本的XML...

    mysql和node.js整合学习,其中有 squence 和 node.js的orm框架,两个 orm框架的学习.zip

    在这个“mysql和node.js整合学习”资料中,我们将探讨如何将这两种技术结合,特别是在使用ORM(对象关系映射)框架时的方法。 ORM框架允许开发者使用面向对象的编程方式来操作数据库,而无需直接编写SQL语句。它在...

    基于ActiveRecord思想开发的至简化的java的Orm框架.zip

    在Java中,虽然原生并没有内置支持ActiveRecord的库,但我们可以根据这一思想自行设计或使用第三方库来实现类似的ORM(Object-Relational Mapping)框架。本压缩包“基于ActiveRecord思想开发的至简化的java的Orm...

    Hibernate使用外键ForeignKey

    在Java企业级开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它使得开发者可以使用面向对象的方式来处理数据库操作,而无需直接编写SQL语句。本篇将详细讲解如何在Hibernate中使用外键`ForeignKey`,...

    ORM(关系型数据库与对象映射项目)

    在本项目中,"ORM(关系型数据库与对象映射项目)"可能是实现了一个ORM框架的实例,或者是在一个具体的应用中使用ORM技术进行数据库操作。这个项目可能涵盖了以下几个方面: 1. **类库选择**:项目可能使用了某种流行...

    ORM.rar_orm

    ORM文档中的ORM.doc可能是对ORM框架的具体使用指南,包括如何创建对象模型、定义数据映射、执行数据库操作等步骤。文档可能还涵盖了以下内容: 1. 数据库连接配置:如何设置ORM框架连接到目标数据库,包括数据库URL...

    外键以实体实现的在三层.rar

    在这个上下文中,"外键以实体实现"指的是在业务逻辑层和数据访问层中,使用对象关系映射(ORM)技术来处理数据库中的外键关系。 首先,我们需要理解外键的概念。外键是数据库设计中的一个重要概念,它用于在一个表...

    asorm1.0beta android Sqlite3 ORM 框架;

    asorm1.0beta android Sqlite3 ORM 框架; 一个安卓上面的数据sql与对象之间的映射框架; 支持自动事务,自动创建表;不支持外键,存储过程;

    orm的详细解释概念

    这样,开发者可以使用面向对象的语言(如Java)操作对象,而ORM框架负责在后台将这些操作转化为相应的SQL指令,与数据库进行交互。 ORM的实现通常包括以下几个组件: 1. **持久化类对象操作API**:这是一个用于...

    asorm android Sqlite3 ORM 框架1.0

    asorm android Sqlite3 ORM 框架; 一个安卓上面的数据sql与对象之间的映射框架; 支持自动事务,自动创建表;不支持外键,存储过程;

    Django中ORM外键和表的关系详解

    总之,Django的ORM外键让开发者能够轻松处理数据库中的关联关系,提供了强大的数据操作功能,同时保持代码的简洁性和可读性。通过合理利用外键,我们可以构建出复杂的数据库模型,以满足各种业务需求。

    Moon.Orm下载

    ORM框架的主要目标是简化数据库操作,使得开发者可以使用面向对象的方式与数据库进行交互,而无需关心底层SQL语句的编写。 Moon.Orm的核心特性包括: 1. **多数据库支持**:Moon.Orm的一个显著特点是其多数据库...

    hibernate一对一外键关系

    在Java持久化技术中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它使得开发者可以使用面向对象的方式来操作数据库,极大地提高了开发效率。本文将深入探讨Hibernate中的一对一外键关系,这对于初学者来说...

    Hibernate关联映射-one to one单向外键关联

    在Java世界中,ORM(对象关系映射)框架如Hibernate极大地简化了数据库操作。本话题主要探讨的是Hibernate中的一种关联映射方式——一对一(One-to-One)单向外键关联。这种关联模式通常用于两个实体之间存在唯一...

    为什么在创建php网站时在mysql数据库表中使用外键?

    在构建PHP网站时,使用MySQL数据库中的外键是一个至关重要的设计决策,这涉及到数据库的完整性和数据一致性。外键是数据库关系模型中的一个重要概念,它允许我们建立表之间的关联,确保数据的一致性和依赖性。以下是...

    Hibernate Annotation 基于外键的一对多双向关联

    在Java的持久化框架Hibernate中,注解是用于对象关系映射(ORM)的一种强大工具,它可以将数据库的表结构与Java类直接关联起来。本文将深入探讨如何使用Hibernate注解实现基于外键的一对多双向关联。我们将通过具体...

Global site tag (gtag.js) - Google Analytics