`
jianchen
  • 浏览: 340672 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

hibernate学习之十八篇

阅读更多

hibernate不适合的场景:
1,不适合OLAP(on-line Analytical Processing 联机分析处理),以查询分析数据为主的系统;适合OLTP(On-line transaction processing联机事务处理)。

2,对于某些关系模型设计不合理的 老系统,也不能发挥hibernate优势。

3,数据量巨大,性能要求苛刻的系统,hibernate也很难达到要求,批量操作数据的效率也不高。

Chapter 20. 最佳实践(Best Practices)
Prev     

--------------------------------------------------------------------------------


Chapter 20. 最佳实践(Best Practices)
设计细颗粒度的持久类并且使用<component>来实现映射。
使用一个Address持久类来封装 street, suburb, state, postcode. 这将有利于代码重用和简化代码重构(refactoring)的工作。

对持久类声明标识符属性。
Hibernate中标识符属性是可选的,不过有很多原因来说明你应该使用标识符属性。我们建议标识符应该是“人造”的(自动生成,不涉及业务含义),并且不是基本类型。为了最大的灵活性,应该使用java.lang.Long or java.lang.String

为每个持久类写一个映射文件
不要把所有的持久类映射都写到一个大文件中。把 com.eg.Foo 映射到com/eg/Foo.hbm.xml中, 在团队开发环境中,这一点显得特别有意义。

把映射文件作为资源加载
把映射文件和他们的映射类放在一起进行部署。

考虑把查询字符串放在程序外面
如果你的查询中调用了非ANSI标准的SQL函数,那么这条实践经验对你适用。把查询字符串放在程序外面可以让程序具有更好的可移植性。

使用绑定变量
就像在JDBC编程中一样,应该总是用占位符"?"来替换非常量值,不要在查询中用字符串值来构造非常量值!更好的办法是在查询中使用命名参数。

不要自己来管理JDBC connections
Hibernate允许应用程序自己来管理JDBC connections,但是应该作为最后没有办法的办法。如果你不能使用Hibernate内建的connections providers,那么考虑实现自己来实现net.sf.hibernate.connection.ConnectionProvider

考虑使用用户自定义类型(custom type)
net.sf.hibernate.UserType. This approach frees the application code from implementing transformations to / from a Hibernate type. 假设你有一个Java类型,来自某些类库,需要被持久化,但是该类没有提供映射操作需要的存取方法。那么你应该考虑实现net.sf.hibernate.UserType接口。这种办法使程序代码写起来更加自如,不再需要考虑类与Hibernate type之间的相互转换。

在性能瓶颈的地方使用硬编码的JDBC
在对性能要求很严格的一些系统中,一些操作(例如批量更新和批量删除)也许直接使用JDBC会更好,但是请先搞清楚这是否是一个瓶颈,并且不要想当然认为JDBC一定会更快。如果确实需要直接使用JDBC,那么最好打开一个 Hibernate Session 然后从 Session获得connection,按照这种办法你仍然可以使用同样的transaction策略和底层的connection provider。

理解Session清洗( flushing)
Session会不时的向数据库同步持久化状态,如果这种操作进行的过于频繁,那么性能会受到一定的影响。有时候你可以通过禁止自动flushing尽量最小化非必要的flushing操作,或者更进一步,在一个特殊transaction中改变查询和其它操作的顺序。

在三层架构中,考虑使用 saveOrUpdate()
当使用一个servlet / session bean 的架构的时候, 你可以把已加载的持久对象在session bean层和servlet / JSP 层之间来回传递。使用新的session来为每个请求服务,使用 Session.update() 或者Session.saveOrUpdate()来更新对象的持久状态。

在两层架构中,考虑使用session disconnection.
当仅仅使用 servlet的时候,你可以在多个客户请求中复用同一个session,只是要记得在把控制权交还给客户端之前disconnect掉session。

不要把异常看成可恢复的
这一点甚至比“最佳实践”还要重要,这是“必备常识”。当异常发生的时候,回滚 Transaction ,关闭Session。如果你不这样做的话,Hibernate无法保证内存状态精确的反应持久状态。尤其不要使用Session.load()来判断一个给定标识符的对象实例在数据库中是否存在,应该使用find()。

对于关联优先考虑lazy fetching
谨慎的使用主动外连接抓取(eager (outer-join) fetching)。对于大多数没有JVM级别缓存的持久对象的关联,应该使用代理(proxies)或者具有延迟加载属性的集合(lazy collections)。对于被缓存的对象的关联,尤其是缓存的命中率非常高的情况下,应该使用outer-join="false",显式的禁止掉eager fetching。如果那些特殊的确实适合使用outer-join fetch 的场合,请在查询中使用left join。

考虑把Hibernate代码从业务逻辑代码中抽象出来
把Hibernate的数据存取代码隐藏到接口(interface)的后面,组合使用DAO和Thread Local Session模式。通过Hibernate的UserType,你甚至可以用硬编码的JDBC来持久化那些本该被Hibernate持久化的类。 (该建议更适用于规模足够大应用软件中,对于那些只有5张表的应用程序并不适合。)

分享到:
评论

相关推荐

    Hibernate学习笔记整理

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

    Hibernate学习.pdf

    ### Hibernate学习知识点详解 #### 1. Hibernate简介与安装配置 **标题:** Hibernate学习 **描述:** Hibernate 学习 Hibernate学习.pdf **标签:** Hibernate 学习 Hibernate学习.pdf **知识点详解:** ####...

    Hibernate中文详细学习文档

    18. XML映射 18.1. 用XML数据进行工作 18.1.1. 指定同时映射XML和类 18.1.2. 只定义XML映射 18.2. XML映射元数据 18.3. 操作XML数据 19. 提升性能 19.1. 抓取策略(Fetching strategies) 19.1.1. 操作延迟...

    hibernate中文参考文档

    Hibernate是一款开源的对象关系映射(Object/Relational Mapping,...整个文档是一个综合性的Hibernate使用指南,它从理论到实践都有所涵盖,对于任何想要深入学习和使用Hibernate框架的Java开发者来说都是宝贵的资源。

    Hibernate学习笔记

    **Hibernate学习笔记** Hibernate是一个强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用程序中管理和持久化数据库对象的便捷方式。本笔记将深入探讨Hibernate的核心概念、配置、实体类、映射文件、...

    Hibernate笔记 马士兵

    第9课 Hibernate的重点学习:Hibernate的对象关系映射 12 一、对象---关系映射模式 12 二、常用的O/R映射框架: 13 第10课 模拟Hibernate原理(OR模拟) 13 一、 项目名称 13 二、 原代码 13 第11课 Hibernate基础配置...

    Hibernate4学习笔记1

    **Hibernate4 学习笔记** Hibernate4 是一个流行的开源对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互。在这个学习笔记中,我们将深入探讨Hibernate4的二级缓存机制、访问策略以及一些主要的新...

    HIBERNATE官方参考手册

    《Hibernate官方参考手册》是学习和理解Hibernate的核心资料,提供了详尽的API文档、配置指南和使用示例。以下是对Hibernate的一些关键知识点的详细说明: 1. **对象关系映射(ORM)**:ORM是Hibernate的核心特性,...

    Hibernate_QBC和Hibernate_QBE

    **标题与描述解析** 标题"Hibernate_QBC和Hibernate_QBE"提及了两个关于Hibernate的查询方式,即Query By ...通过深入学习和实践,开发者能够更好地利用Hibernate的特性,优化数据库操作,提升应用程序的性能。

    Hibernate 课件_HQL

    - `query.setInteger(0, 18);` #### 分页查询 - **定义**:通过限制查询结果的数量和偏移量来进行分页。 - **方法**: - `query.setFirstResult(startIndex);` - `query.setMaxResults(pageSize);` #### 管理...

    Hibernate常用操作示例

    Hibernate常用操作示例,包含详细注释说明,数据库初始化文件。使用和学习请参考:http://blog.csdn.net/daijin888888/article/details/51692942

    hibernate 中HQL语句查询学习笔记

    ### Hibernate中HQL语句查询学习笔记 #### HQL基础 **HQL**(Hibernate Query Language)是Hibernate框架推荐使用的查询语言,它提供了一种面向对象的方式来查询数据库,支持多种复杂的查询操作,如继承、多态及...

    struts2+hibernate3.3图书管理系统

    通过学习这个项目,你可以了解到如何整合Struts2和Hibernate,以及如何设计和实现一个简单的Web应用。它涵盖了配置文件的设置(如struts.xml、hibernate.cfg.xml),Action类的编写,DAO(数据访问对象)层的设计,...

    hibernate Validator 使用指南

    《Hibernate Validator 使用指南》 Hibernate Validator 是一个强大的Java Bean验证框架,它基于JSR-303(Bean Validation)...通过深入学习和实践,你将能够更好地利用Hibernate Validator来构建高质量的应用程序。

    Hibernate基础和入门:新建表和插入表

    标题“Hibernate基础和入门:新建表和插入表”表明这篇内容将主要围绕Hibernate这一Java持久化框架的基础知识展开,重点讲解如何使用Hibernate创建数据库表以及进行数据插入操作。Hibernate是一个强大的ORM(对象...

    精通eclipse整合web开发struts hibernate spring jbpm 第18章源代码(source )

    第18章的源代码可能涵盖了这些框架的集成和实际应用,包括如何配置Eclipse以支持这些框架,如何搭建Struts的Action和Result,如何利用Hibernate进行持久化操作,Spring如何管理bean并协调各个组件,以及如何在JBPM中...

    Hibernate教程18_关系映射案例一

    【标题】"Hibernate教程18_关系映射案例一"主要涵盖了如何在Hibernate框架中进行对象关系映射(ORM)的实践操作。在这个教程中,我们将会深入理解Hibernate如何将数据库的关系模型转换为面向对象的Java代码,以及...

    Hibernate的多对一和一对多操作实例

    在IT领域的数据库设计与对象关系映射(ORM)框架中,Hibernate作为一个强大的工具,被广泛应用...对于那些希望在Java应用程序中高效管理复杂数据关系的开发者而言,Hibernate无疑是一个值得深入学习和掌握的强大工具。

    Struts2+Spring+Hibernate框架技术与项目实战 源码(上).zip

    本项目实战源码提供了从基础到进阶的全方位学习体验,涵盖了1到18章的内容,非常适合开发者深入理解和实践这三大框架的集成应用。 Struts2作为MVC(模型-视图-控制器)框架,主要负责处理HTTP请求和控制业务流程。...

Global site tag (gtag.js) - Google Analytics