简述
Hibernate是一个开源的O/R Mapping (ORM)
 
 ORM就是对象(Object-关系(Relationship)的映射。域模型和关系模型都分别建立在概念模型的基础上,域模型是面向对象的,而关系数据模型是面向关系的。一般情况 下,一个持久化类和一个表对应,在Hibernate中,数据库中的一个表对应程序中的一个类。这种映射通过XML文件配置。
Hibernate的核心接口
Configuration接口:配置hibernate,启动hibernate,创建SessionFactory对象
SessionFactory接口:初始化Hibernate,充当数据库源代理,创建Session对象。特点:1.线程安全,可被多个实例访问;2.不能被多次创建或销毁,如果程序只有一个数据源,那么只使用一个SessionFactory实例,只有应用程序有多个数据源时,才创建多个SessionFactory实例。
Session接口:持久化一个对象,负责保存、更新、删除、加载和查询对象。
Transaction:管理事务
QueryCriteria接口:执行数据库查询
LifecycleValidatable接口:由持久化类实现,回调持久化实例的加载,保存,删除的时间,Validatable接口确保持久化类在被保存之前进行数据验证。由于会使持久化类与Hibernate特定接口相关联,缺乏移植的特性,因此不推荐使用。
Interceptor接口:不由持久化类实现Interceptor接口,而由应用程序提供专门的类实现该接口,可以拦截持久化类的相应事件。                        
 
 Hibernate的配置
首先,让我们看看Hibernate的全局配置文件,这个配置文件可以有两种形式,每种形式都可以完成Hibernate的配置工作,分别是hibernate.properties或者hibernate.cfg.xml,这个文件需要放到上下文路径下面(假设在一个Web应用下,需要放到WEB-INF/classes下面)但请注意,虽然hibernate官方说法是必须放到该目录下,其实是可以放在别的路径下面,只需要在buildSessionFactory的时候加入配置文件的路径就可以了。关于配置文件的内容,可以参看%HIBERNATE_HOME%\src目录中hibernate.properties文件,而关于其含义解释,可以参看: [url]http://www.hibernate.org.cn/53.html[/url]
hibernate的配置文件:hibernate.properties
hibernate.dialect=net.sf.hibernate.dialect.MySQLDialect..指定数据库使用的SQL方言
hibernate.connection.driver_class=com.mysql.jdbc.Driver//指定数据库驱动程序
hibernate.connection.url=jdbc:mysql://localhost:3306/SAMPLEDB//指定连接数据库的URL
hibernate.connection.username=root
hibernate.connection.password=1234
hibernate.show_sql=true//表示在程序运行的时候,会在控制台输出SQL语句。方便跟踪调试。
 
持久化类
持久化类符合JAVABean的标准。私有属性。以及相应的getXXX()setXXX()方法。
注:
get
set后面属性的首字母要大写。
如果持久化属性为boolean类型,get可以改为is
如果分布式的java应用,要求持久化类实现java.io.Serializable接口
持久化类的id属性,用来标识每个对象。称为OID(Object Identifer)
Hibernate要求持久化类提供空的构造方法。
 
Hibernate的初始化
静态块负责初始化:public static SessionFactory sessionFactory;
(1).创建一个Configuration类的实例,其构造方法将hibernate.properties配置文件读入内存
     Configuration config=new Configuration();
(2).调用addClass(XXX.class)方法
     config.addClass(Customer.class);
(3).调用buildSessionFactory()方法
     sessionFactory=config.buildSessionFactory();
(4).通过openSession()方法获得Session实例
    Session sesssion=factory.openSession();
    Transaction tx;
    try{
       tx=session.beginTransaction();
       session.[save][update][delete][load][find](object);
       tx.commit();
    }
    catch (Exception e){
       if (tx!=null)  tx.rollback();
       throw e;
    }
    finally{
      session.close();
    }