Hibernate 开发步骤(初学Hibernate3.2.0)

一、Hibernate 开发步骤(以Hibernate3.2.0为例):
1、Hibernate是开源的,下载Hibernate的源代码包,里面包括所有的jar包和文档。
2、添加Hibernate包:hibernate3.jar和lib下的Hibernate依赖包(大约一共39个)。
3、编写domain类:一些属性和get、set方法。
4、编写映射文件.hbm.xml:把java对象和关系模型对应起来。
5、编写配置文件 hibernate.cfg.xml:用于配置Hibernate,初始化时首先读取此配置文件。
6、编写测试类进行测试。
二、
Hibernate的初始化 
(1)创建一个Configuration类的实例,Configuration类的构造方法把默认文件路径下的hibernate.properties配置文件中的配置信息读入到内存:
     Configuration config = new Configuration();


(2)调用Configuration类的addClass(Customer.class)方法:
      config.addClass(Customer.class);
     该方法把默认文件路径下的Customer.hbm.xml文件中的映射信息读入到内存中。


(3)调用Configuration类的buildSessionFactory()方法:
      sessionFactory = config.buildSessionFactory();
SessionFactory接口 
一个SessionFactory实例对应一个数据存储源,应用从SessionFactory中获得Session实例。SessionFactory有以下特点:
它是线程安全的,这意味着它的同一个实例可以被应用的多个线程共享。
它是重量级的,这意味着不能随意创建或销毁它的实例。如果应用只访问一个数据库,只需要创建一个SessionFactory实例,在应用初始化的时候创建该实例。如果应用同时访问多个数据库,则需要为每个数据库创建一个单独的SessionFactory实例。
Session接口 
Session接口是Hibernate应用使用最广泛的接口。
Session也被称为持久化管理器,它提供了和持久化相关的操作,如添加、更新、删除、加载和查询对象。
Session有以下特点:
不是线程安全的,因此在设计软件架构时,应该避免多个线程共享同一个Session实例。
Session实例是轻量级的,所谓轻量级是指它的创建和销毁不需要消耗太多的资源。这意味着在程序中可以经常创建或销毁Session对象,例如为每个客户请求分配单独的Session实例,或者为每个工作单元分配单独的Session实例。
Session接口操纵数据库的方法
Session接口提供了操纵数据库的各种方法,如:
save()方法:把Java对象保存数据库中。
update()方法:更新数据库中的Java对象。
delete()方法:把Java对象从数据库中删除。
load()方法:从数据库中加载Java对象。
Query()方法:从数据库中查询Java对象。
用Session来执行事务的流程 
Session session = factory.openSession();
  Transaction tx;
  try {
     //开始一个事务
     tx = session.beginTransaction();
     //执行事务
     ...
     //提交事务
     tx.commit();
 }
 catch (Exception e) {
     //如果出现异常,就撤销事务
     if (tx!=null) tx.rollback();
     throw e;
 }
 finally {
     //不管事务执行成功与否,最后都关闭Session
     session.close();
 }


正常执行数据库事务的流程 
saveCustomer()方法
该方法调用Session的save()方法,把Customer对象持久化到数据库中。
       tx = session.beginTransaction();
       session.save(customer);
       tx.commit();
当运行session.save()方法时,Hibernate执行以下SQL语句: 
      insert into CUSTOMERS (ID, NAME, EMAIL, PASSWORD, PHONE, ADDRESS, SEX,
      IS_MARRIED,DESCRIPTION, IMAGE, BIRTHDAY, REGISTERED_TIME) 
      values(1,'Tom','tom@yahoo.com','1234',55556666,'Shanghai','M',0,'I am very honest.', ?,'1980-05-06',null)
在test()方法中并没有设置Customer对象的id属性,Hibernate会根据映射文件的配置,采用increment标识符生成器自动以递增的方式为OID赋值。在Customer.hbm.xml文件中相关的映射代码如下:
      <id column="ID" type="long">
         <generator />
      </id>
loadAndUpdateCustomer ()方法
该方法调用Session的load()方法,加载Customer对象,然后再修改Customer对象的属性。
      tx = session.beginTransaction();
      Customer c=(Customer)session.load(Customer.class,customer_id);
      c.setAddress(address);
      tx.commit();
以上代码先调用Session的load()方法,它按照参数指定的OID从数据库中检索出匹配的Customer对象,Hibernate会执行以下SQL语句:
      select * from CUSTOMERS where update CUSTOMERS set ,EMAIL="Tom@yahoo.com"…ADDRESS="Beijing"…
      where void printCustomer(Customer customer)throws Exception{
   byte[] buffer=customer.getImage();
    FileOutputStream fout=new FileOutputStream("photo_copy.gif");
    fout.write(buffer);
    fout.close();
    System.out.println("------以下是"+customer.getName()+"的个人信息------");
    System.out.println("ID: "+customer.getId());
    System.out.println("口令: "+customer.getPassword());
    System.out.println("E-Mail: "+customer.getEmail());
    System.out.println("电话: "+customer.getPhone());
    ……
}
deleteAllCustomers()方法
该方法调用Session的delete()方法,删除所有的Customer对象:
   tx = session.beginTransaction();
   session.delete("from Customer as c");
   tx.commit();
运行session.delete()方法时,Hibernate先执行select语句,查询CUSTOMERS表的所有Customer对象:
    select * from CUSTOMERS;
接下来Hibernate根据Customer对象的OID,依次删除每个对象:
    delete from CUSTOMERS where


4、save方法可以把临时状态的对象转换持久化对象
5、load和get方法返回的对象总是处于持久化状态
6、update或saveorupdate、lock方法是游离对象转换为持久化状态。
游离对象的特征
1、不位于Session缓存中,游离对象不被Session关联
2、游离对象是由持久化对象转化过来的,因此,在数据库中可能存在与其对应的记录。
3、游离对象和临时对象的相同之处在于,两者都不被Session关联,因此Hibernate不会保证它们的属性变化和数据库保持同步。区别在于游离对象是由持久化对象转变过来的,在数据库中可能有对应的数据,而临时对象在数据库中没有与之对应的数据记录。

4、当调用Session的close方法时,Session的缓存被清空,缓存中所有的持久化对象都变成游离对象

=============================================以上内容是经自己整理完善=================================================================

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值