让我们还是以这个经久不衰的例子"Hello World"开始:) 
  
1.      Message.java: 一个简单的持久类 
package hello; 
  
public class Message { 
private Long id;   //说明 
private String text; 
 private Message nextMessage; 
 private Message() {} 
  
public Message(String text) { 
this.text = text; 
} 
  
public Long getId() { 
return id; 
} 
  
private void setId(Long id) { 
this.id = id; 
} 
  
public String getText() { 
return text; 
} 
  
public void setText(String text) { 
this.text = text; 
} 
  
public Message getNextMessage() { 
return nextMessage; 
} 
  
public void setNextMessage(Message nextMessage) { 
this.nextMessage = nextMessage; 
} 
} 
  
  
  
说明: ID标识符 (identifier) ,它允许应用去访问数据库以一个唯一的标识,这个标识也就是持久类的主键值。如果一个Message对象有两个实例,它们拥有同一个标识,那么代表他们访问的是数据库的同一个数据。在这里我们选择了Long做这个标识的数据类型,但是这不是必须的。因为Hibernate允许这个identifier为任何的数据类型。 
  
  
2.         保存数据信息到数据库: 
  
Session session = getSessionFactory().openSession(); 
Transaction tx = session.beginTransaction(); 
Message message = new Message("Hello World"); 
session.save(message); 
tx.commit(); 
session.close(); 
  
在这段代码中,我们引用了Hibernate的Session和Transaction接口。这段代码的执行,就好像我们做了下面这段SQL所做的事: 
insert into MESSAGES (MESSAGE_ID, MESSAGE_TEXT, NEXT_MESSAGE_ID) 
values (1, 'Hello World', null) 
  
注:这个例子中,我们假设数据中已经存在MESSAGES这张表了。 
  
3.         从数据库中读出信息并打印它们 
  
Session newSession = getSessionFactory().openSession(); 
Transaction newTransaction = newSession.beginTransaction(); 
List messages = 
newSession.find("from Message as m order by m.text asc"); 
System.out.println( messages.size() + " message(s) found:" ); 
for ( Iterator iter = messages.iterator(); iter.hasNext(); ) { 
Message message = (Message) iter.next(); 
System.out.println( message.getText() ); 
} 
newTransaction.commit(); 
newSession.close(); 
  
这段代码中,大家看到了“from Message as m order by m.text asc”,这是Hibernate自带的面向对象查询语言Hibernate Query Language (HQL).那么翻译一下这句话,就是下面这个SQL了: 
select m.MESSAGE_ID, m.MESSAGE_TEXT, m.NEXT_MESSAGE_ID 
from MESSAGES m 
order by m.MESSAGE_TEXT asc 
  
输出结果: 
1 message(s) found: 
Hello World 
  
  
4.         简单的XML映射文件 
  
 
 
"-//Hibernate/Hibernate Mapping DTD//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> 
 
 
name="hello.Message" 
table="MESSAGES"> 
 
name="id" 
column="MESSAGE_ID"> 
 
 
  
 
name="text" 
column="MESSAGE_TEXT"/> 
 
name="nextMessage" 
cascade="all" 
column="NEXT_MESSAGE_ID"/> 
 
 
  
这个映射文件告诉Hibernate,Message这个类是持久化的MESSAGES这张数据库表,identifier属性对应的是表中的MESSAGE_ID字段,text属性对应的是MESSAGE_TEXT字段,nextMessage是一个多对一的关联,对应的是NEXT_MESSAGE_ID字段。 
上面这个文件可以手工编写,也可以借助第三方工具生成。 
  
  
5.         更新一条信息 
下面让我们修改一下刚才存到数据库里面的第一条信息。 
  
Session session = getSessionFactory().openSession(); 
Transaction tx = session.beginTransaction(); 
// 1 is the generated id of the first message 
Message message = 
(Message) session.load( Message.class, new Long(1) ); 
message.setText("Greetings Earthling"); 
Message nextMessage = new Message("Take me to your leader (please)"); 
message.setNextMessage( nextMessage ); 
tx.commit(); 
session.close(); 
  
这段代码等同以下三个SQL语句所要实现的东西: 
select m.MESSAGE_ID, m.MESSAGE_TEXT, m.NEXT_MESSAGE_ID 
from MESSAGES m 
where m.MESSAGE_ID = 1 
  
insert into MESSAGES (MESSAGE_ID, MESSAGE_TEXT, NEXT_MESSAGE_ID) 
values (2, 'Take me to your leader (please)', null) 
update MESSAGES 
  
set MESSAGE_TEXT = 'Greetings Earthling', NEXT_MESSAGE_ID = 2 
where MESSAGE_ID = 1 
  
  
再次运行“Hello World”,输入信息如下: 
  
  
2 message(s) found: 
Greetings Earthling 
Take me to your leader (please) 
  
  
*补充,在Hibernate中最核心的五个接口: 
Session接口:这是Hibernate中一个主要的接口,Session接口的建立和消毁都是轻量级并且耗费资源很少的。这一点很重要,因为在我们的应用,我们每时每刻都在做着Session的create和distroy工作。它不是线程安全的,原则上它应该设计成一个时间只有一个Session才对。Session可以加载一个与一个工作流相关的对象,它可以监测着这个对象的变化,它被称之为持久对象的管理器,当我们要对数据对象进行编辑操作时,就要调用它了。 
  
SessionFactory接口:我们请求一个Session实例,就是从SessionFactory中取得了。当然SessionFactory就不是个轻量级的东西了,它被多个应用的线程所共享。如果你通过Hibernate访问多个数据库,就要为每一个数据库建立一个SessionFactory。在Hibernate的运行时,SessionFactory缓存了SQL段和其它的中介映射数据。它也保持one unit of work正在读取的数据和将来可能被用到的数据。 
  
Configuration接口:Configuration用于指定一个应用所使用的映射文件的地址和Hibernate指定的属性文件,然后建立一个SessionFactory。 
  
Transaction接口: 
  
Query and Criteria接口: 
  
  
 (未完)   
 
  |