`

Hibernate学习笔记(三)对象-关系映射基础

阅读更多
1.Hibernate调用对象的getXXX()方法,读取对象信息,把它保存到数据库。调用对象的setXXX()方法,把从数据库中读出的对象信息写入到对象中。
即Hibernate的session执行save(),update()或saveOrUpdate()方法时会调用对象的getXXX()方法。
当session执行get()或load()方法时,以及Query执行查询时会调用对象的set()方法。

在持久化类中,既可把属性定义为基本类型,也可以定义为包装类型,他们对应相同的Hibernate映射类型。
比如double和Double 都是<property name="XXX" type="double" column="xxx">

Hibernate访问持久化类属性的策略(<property>元素access属性指定Hibernate访问持久化类属性的方式)
1.property:这是默认值,表明Hibernate通过get/set方法访问类的属性。优先推荐。
2.field:表明Hibernate运用Java反射机制直接访问类的属性。e.g. <property name="name" access="field">
3.还可以自定义持久化类的属性访问方式。这需要创建一个实现org.hibernate.property.PropertyAccessor接口的类,
      并将类的完整名字赋值给<property>的access属性。

2.设置派生属性
利用<property>元素的formula属性: formula属性用来设置一个sql表达式
e.g. 当表中没有对应属性字段TOTAL_PRICE时可以
<property name="totalPrice" formula="(select sum(o.PRICE) from ORDERS o where o.CUSTOMER_ID=ID)"/>
如果子查询语句查询结果为空,Hibernate会把totalPrice赋值为null,所以不能使用基本数据类型

formula指定SQL表达式中可以引用表字段,调用SQL函数或包含子查询语句
e.g. 表示客户购买单项商品信息的LineItem类中有一个unitPrice属性,取值为:商品单价(BASE_PRICE)*购买数量(QUANTITY)
<property name="unitPrice" formula="BASE_PRICE*QUANTITY"/>


3.控制insert和update语句
Hibernate在初始化阶段会根据映射文件信息,为所有的持久化类预定义insert,updatea,delete和根据OID加载数据库中持久化实例的SELECT
e.g.
insert into USER(ID,NAME) values(?,?);
update USER set NAME=? where ID=?;
delete from USER where ID=?;
select ID,NAME from USER where ID=?;
以上SQL语句中的?号代表JDBC  PreparedStatement中的参数.这些SQL语句都放在SessionFactory的内置缓存中,当执行Session的
save(),update(),delete(),load()和get()方法时,将从缓存中找到相应的SQL语句,再把参数值绑定到该SQL语句中。
Tips:HQL或QBC查询对应的select语句是在执行该代码时菜动态生成的。

默认情况下,预定义的SQL语句中包含了表的所有字段,此外Hibernate还允许在映射文件中控制insert和update语句的内容
用于控制insert和update语句的映射属性
<property>元素的insert属性:如果为false,在insert语句中不包含该字段,表明该字段永远不能被插入。默认值为true
<property>元素的update属性:如果为false,在update语句中不包含该字段,表明该字段永远不能被更新。默认值为true
<class>元素的mutable属性:如果为false,等价于所有<property>元素的update属性为false,表示整个实例不能被更新,默认值为true。
<class>元素的dynamic-insert属性:如果为true,表示当保存一个对象时,会动态生成insert语句,insert语句中仅包含所有取值不为null的字段。默认为false。
<class>元素的dynamic-update属性:如果为true,表示当更新一个对象时,会动态生成update语句,update语句中仅包含所有需要更新的字段。默认为false。

Hibernate生成动态SQL语句的系统开销很小,因此不会影响应用的运行性能。如果表中包含许多字段,建议把dynamic-insert属性
和dynamic-update属性都设为true。这样,可以节省数据库执行SQL语句的时间,从而提高应用的运行性能。


4.处理SQL引用标识符
标识符:是指用于数据库表、视图、字段或索引等命名的字符串。常规标识符不包含空格也不报告特殊字符,因此无须使用引用符号。
e.g. crete table CUSTOMERS(ID bigint not null,NAME varchar(15) ... 中的CUSTOMERS,ID和NAME都是标识符。
如果数据库表名或字段名中包含空格或特殊字符,那么可以使用引用标识符。
e.g. CUSTOMERS表中有一个引用标识符字段`CUSTOMER DESCRIPTION`
映射文件中也应该使用标识符<property name="description" column="`CUSTOMER DESCRIPTION`"/>
注意:不同数据库,引用标识符有不同的形式,SQLServer中为[],MySQL中为 `` 。在设置Hibernate映射文件时一律采用``,hibernate根据方言生成正确标识符。

5.创建命名策略
表名和字段名都大写,表名以S结尾。
可以通过实现Hibernate的org.hibernate.cfg.NamingStrategy接口实现。Hibernate提供两个参考实现类
org.hibernate.cfg.DefaultNamingStraegy类:这是NamingStrategy类的接口的默认实现类。
org.hibernate.cfg.ImprovedNamingStragegy类:这是NamingStrategy接口的高级实现类。

6.设置数据库Schema
如果一个数据库系统中调用不同的Schema中存在命名相同的表。可以在<hibernate-mapping>元素中设置一个schema属性:
e.g. <hibernate-mapping schema="schema1">则会把该映射文件中的持久化类映射为表 schema1.XXX
  如果个别类和schema2中的表映射,那么可以在这些个别类的<class>元素中设置一个schema属性<class name="Xxx" table="XXX" schema="schema2">
 
7.设置类的包名
默认情况下,在设置<class>元素的name属性时,必须提供完整的类名,即包名.类名。
如果一个映射文件下多个类属于同一个包,可以设置<hibernate-mapping>元素的package属性。 e.g. <hibernate-mapping package="mypack">
分享到:
评论

相关推荐

    Hibernate学习笔记(1-13)

    【Hibernate学习笔记(1-13)】是传智播客李勇的教程,涵盖了Hibernate框架的基础到进阶内容。Hibernate是一个流行的ORM(对象关系映射)框架,它旨在解决Java面向对象编程与关系型数据库之间的模型不匹配问题,即...

    Hibernate学习笔记特别详细

    《Hibernate学习笔记特别详细》 Hibernate,作为一款开源的Object-Relational Mapping(ORM)框架,为Java开发者提供了强大的数据库操作支持。它简化了数据库访问的复杂性,使得开发人员可以像操作对象一样操作...

    Hibernate学习笔记整理

    Hibernate学习笔记整理 以下是 Hibernate 框架的详细知识点: Hibernate 介绍 Hibernate 是一个 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到数据库表中。它提供了一个简洁的方式来访问和操作...

    Java相关课程系列笔记之十四Hibernate学习笔记

    【Java相关课程系列笔记之十四Hibernate学习笔记】 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。本笔记将详细阐述Hibernate的核心概念、使用方法和特性。 一、...

    JPA学习笔记-EJB-04JPA关联映射总结

    本篇笔记主要聚焦于JPA的关联映射,这是JPA中一个重要的概念,用于定义实体之间的关系。 关联映射允许我们将数据库中的表关系映射到Java对象的关联上。在Hibernate中,这些关系通常通过XML配置文件来定义,而在JPA...

    Java相关课程系列笔记之十四Hibernate学习笔记.doc

    【Java相关课程系列笔记之十四Hibernate学习笔记】 Hibernate是一个开源的对象关系映射(ORM)框架,主要用于简化Java应用程序对数据库的访问。它提供了一种在Java对象和数据库记录之间进行映射的机制,使得开发者...

    hibernate学习笔记文档

    ### Hibernate 学习笔记知识点概览 #### 一、Hibernate 概述 - **定义**:Hibernate 是一款开源的对象关系映射(ORM)框架,它实现了将 Java 应用程序中的对象模型映射到关系型数据库中的记录。通过 ORM 技术,...

    Hibernate学习笔记与总结

    **Hibernate学习笔记与总结** Hibernate 是一款开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库上操作对象数据的便捷方式。本文将深入探讨Hibernate的核心概念、配置、实体类、映射文件、...

    hibernate API帮助文档 及hibernate学习笔记

    Hibernate是一款强大的Java持久...通过阅读这份“Hibernate API帮助文档”和“Hibernate学习笔记”,你将能够深入理解Hibernate的工作原理,掌握其API的使用,并能在实际项目中有效地利用Hibernate进行数据持久化操作。

    达内HIBERNATE学习笔记

    根据提供的信息,我们可以总结出以下关于达内HIBERNATE学习笔记的重要知识点: ### 第一章:Hibernate入门 #### 1.1 学习目标 - 理解Hibernate的基本概念。 - 掌握如何使用Hibernate进行开发。 #### 1.2 对象持久...

    马士兵hibernate学习笔记

    ### 马士兵Hibernate学习笔记知识点总结 #### 一、HelloWorld示例 - **目的**:通过简单的示例理解Hibernate的基本使用流程。 - **步骤**: - 创建Java项目`hibernate_0100_HelloWorld`。 - 建立库依赖,包括...

    hibernate学习笔记

    在本篇《Hibernate学习笔记》中,我们将深入探讨Hibernate这一流行的Java对象关系映射(ORM)框架。Hibernate允许开发者以面向对象的方式处理数据库操作,极大地简化了数据存取的复杂性。以下是一些关键知识点: 1....

    马士兵java框架hibernate学习笔记

    以上是马士兵Java框架Hibernate学习笔记的主要知识点概览,涵盖了从基础配置到高级特性的一系列内容。对于初学者来说,这是一个很好的起点,可以帮助他们快速掌握Hibernate的核心概念和技术要点。

    hibernate学习笔记mashibing

    《Hibernate学习笔记——马士兵教程解析》 在Java开发领域,ORM(Object-Relational Mapping)框架的使用已经非常普遍,其中Hibernate作为一款优秀的ORM框架,因其强大的功能和易用性深受开发者喜爱。本文将根据马...

    hibernate学习笔记-01helloword

    【标题】"hibernate学习笔记-01helloworld"主要涵盖了Hibernate框架的基础入门知识,是初学者了解和掌握Hibernate的重要起点。Hibernate是一款强大的Java对象关系映射(ORM)框架,它简化了数据库操作,使得开发者...

    Struts+spring+hibernate学习笔记! - Struts原理与实践 - JavaEye知识库.files

    Struts 是一个 MVC(Model-View-Controller)架构的 Web 框架,Spring 提供了一个全面的后端服务管理平台,而 Hibernate 则是用于对象关系映射(ORM)的框架,简化了数据库操作。下面将详细介绍这三个框架的基本概念...

Global site tag (gtag.js) - Google Analytics