`

Hibernate ORM 对象-关系 映射

    博客分类:
  • SSH
阅读更多
     Hibernate的持久化类使用的是JavaBean的风格,为要被访问的属性提供了一套get和set方法,这两个方法也叫做持久化类的访问方法.记得曾经在接触JavaBean的时候我很迷糊,总觉得提供这两个方法,倒不如把Bean的属性设置public,然后直接调用对象.属性,这样来的方便. 但是后来,有一个这样的需求,就是一个人名字可以被查看,但是不可以修改.这个时候如果用set方法的话,只需要把set方法的修饰符换为private 就OK了.如果是用对象.属性的形式调用就麻烦了.而且最重要的一个有点是JavaBean的风格可以简化Hibernate通过JAVA反射机制来获得持久化类的访问方法的过程,至于JAVA的反射机制我也是了解一些皮毛.据说很深奥.有兴趣的朋友可以Google一下.有一点值得注意,就是JAVA应用程序不能访问JavaBean持久化类的private类型的get,set方法.而Hibernate没有这个限制,可以访问所有的级别.包括 private default,protected,public.
      Java有8种基本类型:byte,short,char,int,long,float,double,boolean,还有8种与之对应的包装类型,Byte,Short,Character,Integer,Long,Float,Double,Boolean包装类型就是把基本类型包装成对象的意思.基本类型于包装类型之间可以方便的转换,例如:
      int i = 0;
      Integer ie = new Integer(i);//基本类型转换成包装类型
      i = ie.intValue();//包装类型转化成基本类型

      注意,直接转换也是可以的.例如i = ie; JAVA会自动把包装类型转换成基本类型.或者ie = i; JAVA会自动把基本类型转换成包装类型.在持久化类中,既可以把属性定义为基本类型,也可以定义为包装类型,他们对应的Hibernate映射类型 int和Integer都对应int类型,这个表示不是很明显,在用JAVA对象类型字符串举例String,数据库是varhcar(50),在 hibernate的*.hbm.xml映射文件里一律写为string.其实使用基本类型或者包装类型来定义持久化类中的属性是各有优缺点的.基本类型就是使用方便,简单,在需要数字运算的时候直接可以运算.而包装类型就要麻烦的先转换成基本类型,然后在进行运算,但是包装类型的优点在于能表达null 值,每一个包装类型的对象创建的时候默认值都是null类型的.而基本类型是不可以表达null的,它们的默认值是0.为什么要表达null值呢.因为 SQL中.所有类型的数据,默认值都是null的.当进入insert的时候,没有复值的属性,默认值就是null,所以说JAVA的包装类型和数据库之间的对应关系更直接.这里建议Hibernate的OID设置为包装类型,其他的属性就根据业务需要和个人习惯来定吧.
      Hibernate在初始化阶段会根据映射文件的信息,为所有的持久化类预定义insert语句,update语句where ID,delete语句where ID,select语句where ID,这里所说的语句就是标准的SQL增,删,改,查.语句,参数用?代表JDBC PreparedStatement中的参数,这里就不举例了.这些SQL语句都存放在SessionFactory的缓存中,当执行Session的 save(),update(),delete(),load()方法时,将会从SessionFactory的缓存中读取这些预定义的SQL语句,在把具体的参数值绑定到SQL语句中,这就是Hibernate的基本原理.在默认的情况下这些语句表达的是所有的字段.当然Hibernate还允许我们在映射文件里控制insert和update语句的内容.比如在映射文件中<property 元素中的update属性设置成为false,那么这个字段,将不被包括在基本的update语句中,修改的时候,将不包括这个字段了.insert同理.dynamic动态SQL语句的配置也是很常用的.下面介绍配置SQL语句的具体属性:
      1)<property>元素 insert属性:设置为false,在insert语句中不包含这个字段,表示永远不会被插入,默认true
      2)<property>元素 update属性:设置为false,在update语句中不包含这个字段,表示永远不会被修改,默认true
      3)<class>元素 mutable属性:设置为false就是把所有的<property>元素的update属性设置为了false,说明这个对象不会被更新,默认true
      4)<property>元素 dynamic-insert属性:设置为true,表示insert对象的时候,生成动态的insert语句,如果这个字段的值是null就不会加入到insert语句当中.默认false
      5)<property>元素 dynamic-update属性,设置为true,表示update对象的时候,生成动态的update语句,如果这个字段的值是null就不会被加入到update语句中,默认false
      6)<class>元素 dynamic-insert属性:设置为true,表示把所有的<property>元素的dynamic-insert属性设置为true,默认false
      7)<class>元素 dynamic-update属性:设置为true,表示把所有的<property>元素的dynamic-update属性设置为true,默认false

      Hibernate生成动态SQL语句的消耗的系统资源(比如CPU,内存等)是很小的,所以不会影响到系统的性能,如果表中包含N多字段,建议把 dynamic-update属性和insert属性设置为true,这样在插入和修改数据的时候,语句中只包括要插入或者修改的字段.可以节省SQL语句的执行时间,提高程序的运行效率.
分享到:
评论

相关推荐

    hibernateORM1-n映射

    在"hibernateORM1-n映射"这个主题中,我们将深入探讨Hibernate中的一对多(1:N)映射关系。 在关系数据库中,一对多关系是指一个表中的记录可以对应另一个表中的多个记录。在Hibernate中,这种关系可以通过配置XML...

    hibernate-orm-master.zip

    Hibernate ORM(Object-Relational Mapping)是Java领域中最受欢迎的持久化框架之一,它提供了一种便捷的方式将Java对象映射到关系数据库,从而实现了对象-关系的解耦。"hibernate-orm-master.zip"文件包含了...

    hibernate-configuration-3.0.dtd、hibernate-mapping-3.0.dtd

    在Hibernate中,每个Java实体类通常对应一个`.hbm.xml`映射文件,其中包含了对象-关系的映射信息。例如,`&lt;class&gt;`元素表示一个Java类,它的`name`属性是类的全限定名,`table`属性指定对应的数据库表。`&lt;id&gt;`元素...

    hibernate-orm-3.3源码

    Hibernate,作为一个强大的对象关系映射(ORM)框架,一直以来都是Java开发者的重要工具。其3.3版本是 Hibernate 的一个重要里程碑,为开发者提供了丰富的功能和优化的性能。本文将针对《hibernate-orm-3.3源码》...

    hibernate-orm-4.3.9源码

    总结,hibernate-orm-4.3.9源码揭示了Hibernate的内部实现细节,包括对象-关系映射、缓存管理、事务处理、查询优化等多个方面。通过研究源码,开发者不仅可以理解其工作原理,还能提升在实际项目中的使用技巧,从而...

    Hibernate源码(hibernate-orm-main.zip)

    Hibernate源码(hibernate-orm-main.zip)Source Code: Hibernate ORM 是一个为应用程序、库和框架提供对象/关系映射 (ORM) 支持的库。 它还提供了 JPA 规范的实现,这是 ORM 的标准 Java 规范。

    hibernate_orm-master

    Hibernate ORM通过提供一种对象-关系映射(ORM)机制,将Java对象与数据库中的记录进行对应,使得开发者可以使用面向对象的方式来操作数据库,极大地提高了开发效率。它的核心功能包括持久化类的设计、事务处理、...

    Hibernate稳定版(hibernate-release-5.6.2.Final.zip)

    Hibernate稳定版(hibernate-release-5.6.2.Final.zip),Hibernate ORM 是一个为应用程序、库和框架提供对象/关系映射 (ORM) 支持的库。它还提供了 JPA 规范的实现,这是 ORM 的标准 Java 规范。

    Hibernate稳定版(hibernate-release-5.3.23.Final.zip)

    Hibernate稳定版(hibernate-release-5.3.23.Final.zip),Hibernate ORM 是一个为应用程序、库和框架提供对象/关系映射 (ORM) 支持的库。它还提供了 JPA 规范的实现,这是 ORM 的标准 Java 规范。

    hibernate-orm-4.3.zip

    Hibernate ORM是Java世界中广泛使用的对象关系映射框架,它通过在Java对象和关系数据库之间建立映射,使得开发者可以使用面向对象的方式来操作数据库,从而降低了数据库操作的复杂性。在Hibernate 4.3版本中,它...

    hibernate-orm-3.2.zip

    Hibernate ORM 是一个强大的Java对象关系映射(ORM)框架,它极大地简化了数据库与Java应用程序之间的数据交互。在“hibernate-orm-3.2.zip”这个压缩包中,包含的是Hibernate 3.2版本的相关文件,这是一个历史悠久...

    hibernate-search-orm-5.0.0.Alpha1.zip

    Hibernate是一个广泛使用的Java对象关系映射(ORM)框架,它允许开发者用面向对象的方式处理数据,而无需直接操作SQL。Hibernate Search ORM则是Hibernate的一部分,它增强了Hibernate的能力,使其能够对存储的数据...

    hibernate-search-orm-4.4.2.Final.zip

    Hibernate Search ORM的核心在于将数据库中的对象模型与Lucene搜索引擎紧密结合,通过索引实体对象,使得我们能够对数据库中的文本数据进行复杂的全文搜索。在4.4.2.Final版本中,这个框架引入了更多的配置选项和...

    hibernate-release-4.3.10.Final.zip

    Hibernate,作为Java领域最著名的对象关系映射(ORM)框架之一,自诞生以来就深受开发者喜爱。本次我们聚焦于`hibernate-release-4.3.10.Final`版本,这是一个稳定且功能丰富的版本,为开发者提供了强大的数据持久化...

    hibernate-release-5.3.2.Final

    Hibernate ORM,作为Java领域最著名的对象关系映射框架之一,自诞生以来就深受开发者喜爱。2018年7月5日,Hibernate发布了其最新版本——5.3.2.Final,带来了诸多改进和新特性,为开发者提供了更为高效、稳定的持久...

    Hibernate ORM - 继承关联关系之union-subclass

    在Java世界中,ORM(Object-Relational Mapping)框架如Hibernate是将数据库关系模型与对象模型之间进行映射的关键工具,极大地简化了数据库操作。本文将深入探讨Hibernate ORM中的一个特定概念——继承关联关系的...

    Hibernate稳定版(hibernate-release-5.4.32.Final.zip)

    Hibernate稳定版(hibernate-release-5.4.32.Final.zip),Hibernate ORM 是一个为应用程序、库和框架提供对象/关系映射 (ORM) 支持的库。它还提供了 JPA 规范的实现,这是 ORM 的标准 Java 规范。

    ORM对象关系映射

    因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。 ORM 技术包括以下四部分:一个对持久类对象进行 CRUD 操作的 API;一个语言或 API 用来规定与类和类属性相关的...

Global site tag (gtag.js) - Google Analytics