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

Hibernate学习笔记

阅读更多

相关文档: 
 Hibernate
参考文档  v3.0.2    
 http://www.redsaga.com/hibernate-ref/3.x/zh-cn/html/

  Hibernate
实践.pdf


 ● 笔记

  
·SessionFactory是数据库编译后的内存映像,多个数据源则需要使用多个SessionFactory。持久化对象(PO)=JavaBean+映射配置文件。所有的持久化类(persistent classes)都要求有无参的构造器,因为Hibernate必须使用Java反射机制来为你创建对象。
  ·
使用Hibernate的开发者应该总是关注对象的状态(state),不必考虑SQL语句的执行。 这部分细节已经由Hibernate掌管妥当,只有开发者在进行系统性能调优的时候才需要进行了解。

  ·Hibernate的操作
    The main function of the
Session is to offer create, read and delete operations for instances of mapped entity classes. Instances may exist in one of three states:

transient: never persistent, not associated with any
Session
persistent: associated with a unique
Session
detached: previously persistent, not associated with any
Session

Transient instances may be made persistent by calling
save(), persist() or saveOrUpdate(). Persistent instances may be made transient by calling delete(). Any instance returned by a get() or load() method is persistent. Detached instances may be made persistent by calling update(), saveOrUpdate(), lock() or replicate(). The state of a transient or detached instance may also be made persistent as a new persistent instance by calling merge().

save() and persist() result in an SQL INSERT, delete() in an SQL DELETE and update() or merge() in an SQL UPDATE. Changes to persistent instances are detected at flush time and also result in an SQL UPDATE. saveOrUpdate() and replicate() result in either an INSERT or an UPDATE.

    session.save()/session.persist()        //Persist the given transient instance

    session.createQuery()            HQL
查询
    session.createCriteria()          
根据实体的条件查询
    session.createSQLQuery()       
原生的SQL查询 
           
    session.get()/session.load()    
根据某个实例的持久化标识(id),来装载对象。当不存在指定的对象时候,前者返回null,后者抛出异常。
    sess.delete(cat);    //
delete()的用途是把一个持久实例变成瞬时(transient)
  
    
例如:
    
session.createCriteria()  
List cats = sess.createCriteria(Cat.class)
    .add( Restrictions.like("name", "Fritz%") )
    .add( Restrictions.between("weight", minWeight, maxWeight) )
    .list();
//Criterion
代表查询条件,由Restrictions类来产生。

 ·Session刷出(flush)
每间隔一段时间,Session会执行一些必需的SQL语句来把内存中的对象的状态同步到JDBC连接中。这个过程被称为刷出(flush),默认会在下面的时间点执行:

   

  • 在某些查询执行之前
  • 在调用org.hibernate.Transaction.commit()的时候
  • 在调用Session.flush()的时候




·同一个类的多次映射
   
对特定的持久化类,映射多次是允许的。这种情形下,你必须指定entity name来区别不同映射实体的对象实例。(默认情况下,实体名字和类名是相同的。)

·分页
   Hibernate
的分页比较简单,
   Query q = sess.createQuery("from DomesticCat cat");
q.setFirstResult(20);
q.setMaxResults(10);
List cats = q.list();

//
另外,Hibernate还支持可滚动遍历(Scrollable iteration)


·批量处理
    
对于批量处理,需要设置hibernate.jdbc.batch_size 属性(例如=20,同时需要再一定间隔进行session的释放内存。例如
   session.flush();
session.clear();


 ·Hibernate的的实体映射
    
1-N,或者N-N的关系时候,当然就要使用到集合类型(例如bag,list,set等)。而当N-1,或者1-1的时候则不需要使用到集合类型。
    
N-N的关系时候,当然要用到连接表。

 ·Hibernate的事件框架由以下两部分组成
    
拦截器机制:实现Interceptor接口
    
事件监听器:实现LoadEventListener,SaveEventListener等。

 ·
LightWeight J2EE》这本书的第四章Hibernate中关于SQL的例子很好说明了实体的映射关系,代码见附件SQL08-02-01_22.rar

·HQL
    HQL中可以是用new操作符,参见: HQL获取部分的实体对象属性


 ·占位符的查询
    HQL
的方式:
    from User u where u.name=:username and u.yearold=:yearold
这就是一个常见的简单值的占位符式的查询,通过这样的方式就可以把值注入到
参数中:
query.setParameter(“username”,”bluedavy”);
query.setParameter(“yearold”,25)

    SQL的方式:
    from User u where u.name=? and u.yearold=?
query.setParameter(0,”bluedavy”);
query.setParameter(1,25);

    SQL查询进行实体映射时,应该尽量用占位符{}
    sess.createSQLQuery("SELECT {cat.*}, {mother.*}  FROM CATS c, CATS m WHERE c.MOTHER_ID = c.ID")
 .addEntity("cat", Cat.class)
 .addEntity("mother", Cat.class)


 ·Hibernate之前的很多ORM产品不能像SQL一样只获取需要的东西。所以要合理设置相关属性(Property或者集合或者映射等)LazyLoad,Hibernate3默认LazyLoad的属性值就是true。只有调用到相关属性时才会从缓存或数据库中加载。当然,集合也是同样如此。

 ·
inverse="true" 设置的谨慎
   User
Rolen-n单向关联,如果设置了inverse="true".则当保存UserRole时,不会保存相应的连接表
   (?)
是不是n-n双向关联的时候,才需要设置该值?

 

 · hibernate对实体的操作是需要跟事务关联,如果没有执行事务的commit(),则不会将其持久化到数据库中。

 

 ·hibernatespring集成时,将DAO类继承自HibernateDaoSupport,然后通过getHibernateTemplate()方法来实现CRUD操作则不需要直接管理session和事务。


 

分享到:
评论

相关推荐

    Hibernate学习笔记特别详细

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

    hibernate学习笔记

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

    Hibernate学习笔记整理

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

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

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

    hibernate 学习笔记精要

    hibernate 学习笔记精要hibernate 学习笔记精要hibernate 学习笔记精要hibernate 学习笔记精要

    hibernate学习笔记mashibing

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

    Hibernate 学习笔记(全套)

    这套笔记是我学习Hibernate,进行相关技术点训练时记录下来的,其中包括技术点说明与相关事例,拿出来与大家分享。

    马士兵hibernate学习笔记(原版)

    ### 马士兵Hibernate学习笔记知识点总结 #### 一、课程内容概览 - **HelloWorld**:通过简单的示例程序介绍如何启动一个基于Hibernate的Java项目。 - **Hibernate原理模拟**:解释O/R Mapping的概念及其重要性。 -...

    马士兵hibernate学习笔记

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

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

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

    Hibernate学习笔记与总结

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

    hibernate学习笔记文档

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

    JDBC Hibernate学习笔记

    ### JDBC与Hibernate学习笔记 #### 一、JDBC概述 **1.1 ODBC与JDBC的区别** - **ODBC(Open Database Connectivity)**: 开放式数据库连接是一种开放标准的应用程序接口(API),用于实现数据库应用程序与不同...

    hibernate 学习笔记1

    ### 对象持久化与Hibernate学习笔记 #### 一、对象持久化的概念与重要性 - **定义**: 对象持久化是指将程序中的对象状态存储到持久化存储设备上的过程,以便在程序结束运行后仍然可以保留这些数据。 - **必要性**:...

    hibernate学习笔记.

    【hibernate学习笔记】 在Java开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它极大地简化了数据库操作。以下是对Hibernate的学习要点的详细解释: 1. **建立第一个Hibernate版本的HelloWorld** - **...

    hibernate 学习笔记3

    标题:Hibernate学习笔记3 描述:本篇笔记深入探讨了Hibernate框架中一对多关系的映射及持久化对象状态管理,结合个人理解与实践经验,旨在为读者提供一份详实的学习资料。 ### 一、一对多关系映射详解 在...

Global site tag (gtag.js) - Google Analytics