Hibernate 开发步骤(初学Hibernate3.2.0)
2013-05-09 09:03
204 查看
一、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的缓存被清空,缓存中所有的持久化对象都变成游离对象
=============================================以上内容是经自己整理完善=================================================================
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的缓存被清空,缓存中所有的持久化对象都变成游离对象
=============================================以上内容是经自己整理完善=================================================================
相关文章推荐
- Struts2+Hibernate整合应用开发步骤
- 【精简】hibernate开发的基本步骤
- Hibernate的开发全步骤过程
- Struts2+Hibernate整合应用开发步骤
- Hibernate应用开发步骤(学习笔记)
- Hibernate第二讲:Hibernate核心API和Hibernate开发步骤
- struts+spring+hibernate开发步骤
- Hibernate开发基本步骤
- Hibernate的开发全步骤过程
- Struts2+Hibernate整合应用开发步骤
- Hibernate工作原理及开发步骤
- Hibernate开发步骤
- Hibernate2--开发步骤及接口说明
- Hibernate的开发全步骤过程
- hibernate开发步骤
- Hibernate(二)---Hibernte的开发步骤
- hibernate开发步骤
- Struts2+Hibernate整合应用开发步骤
- Struts2+Hibernate整合应用开发步骤
- J2EE框架(TomcatStrutsHibernateSpringAjax(dojo))开发步骤: