Hibernate学习——Hibernate的核心接口与类

转自:http://blog.csdn.net/yu422560654/article/details/7007978

Hibernate学习——Hibernate的核心接口与类_第1张图片

这种层次关系在之前的例子中就有很好的体现(http://blog.csdn.net/yu422560654/article/details/6974796):

[java]  view plain copy print ?
  1. public static void main(String[] args) throws Exception    
  2. 19.    {    
  3. 20.        //实例化Configuration     
  4. 21.        Configuration conf = new Configuration().configure();    
  5. 22.        //实例化SessionFactory     
  6. 23.        SessionFactory sf = conf.buildSessionFactory();    
  7. 24.        //实例化Session     
  8. 25.        Session sess = sf.openSession();    
  9. 26.        //开始事务     
  10. 27.        Transaction tx = sess.beginTransaction();    
  11. 28.        //创建消息实例     
  12. 29.        News n = new News();    
  13. 30.        //设置消息标题和消息内容     
  14. 31.        n.setTitle("疯狂Java联盟成立了");    
  15. 32.        n.setContent("疯狂Java联盟成立了,网址是www.crazyit.org");    
  16. 33.        //保存消息     
  17. 34.        sess.save(n);    
  18. 35.        //提交事务     
  19. 36.        tx.commit();    
  20. 37.        //关闭Session     
  21. 38.        sess.close();    
  22. 39.    }    

一、Configuration类

Hibernate学习——Hibernate的核心接口与类_第2张图片

二、SessionFactory接口

Hibernate学习——Hibernate的核心接口与类_第3张图片 

使用SessionFactory对象可以获取Session对象。

 

三、Session(会话)接口


Session接口是Hibernate中的核心接口,它不是Java Web应用中HttpSession接口。Hibernate操作数据库之前必须先获取一个Session对象,相当于JDBC在操作数据库之前必须获取一个Connection对象一样。

Hibernate学习——Hibernate的核心接口与类_第4张图片


获取Session对象后,Hibernate内部并不会获取操作数据库的java.sql.Connection对象,而是等待Session对象真正需要对数据库进行CRUD等操作时,才会从数据库连接池中获取java.sql.Connection对象。而关闭Session对象时,则是将java.sql.Connection对象返回到连接池中,而不是直接关闭java.sql.Connection对象。

1、save()方法

save()方法是用来保存持久化对象,进而在数据库中新增一条数据的方法;执行save()方法之后不会立即操作数据库来进行保存数据,而是在Transaction对象的commit()方法执行之后才会保存数据。

[java]  view plain copy print ?
  1. import org.hibernate.Session;  
  2. import org.hibernate.SessionFactory;  
  3. import org.hibernate.Transaction;  
  4. import org.hibernate.cfg.Configuration;  
  5. import java.util.Date;  
  6.   
  7. public class HibernateTest {  
  8.     public static void main(String[] args) {  
  9.         Configuration config = new Configuration();  
  10.         config.configure();  
  11.         SessionFactory sessionFactory = config.buildSessionFactory();  
  12.         Session session = sessionFactory.getCurrentSession();  
  13.         Transaction tx = session.beginTransaction();  
  14.   
  15.         Guestbook gb = new Guestbook();  
  16.         gb.setName("刘伟");  
  17.         gb.setPhone("01082622285");  
  18.         gb.setEmail("[email protected]");  
  19.         gb.setTitle("大家好");  
  20.         gb.setContent("欢迎大家学习Hibernate技术。");  
  21.         gb.setCreatedTime(new Date());  
  22.   
  23.         session.save(gb);  
  24.         tx.commit();  
  25.         sessionFactory.close();  
  26.     }  
  27. }  

 

2、get()/load()方法

通过Session对象的get()方法可以获取数据库中的一条记录,如:

[java]  view plain copy print ?
  1. Guestbook gb=(Guestbook) session.get(Guestbook.class,new Integer(1));//查找Guestbook中id为1的记录  

get()方法的第一个参数是持久化对象,第二个参数是要查找的持久化对象的标识符属性值。

通过Session对象的load()方法可以获取数据库中的一条记录,如:

[java]  view plain copy print ?
  1. Guestbook gb=(Guestbook) session.load(Guestbook.class,new Integer(1));//查找Guestbook中id为1的记录  

两者之间的区别:load()和get()在未找到符合条件的持久化对象的时候,load()会抛出一个违例,而get()方法返回null。另外两者对缓存对象的读取也不同,load()方法会先从Hibernate的一级缓存中去查找符合条件的对象,找不到的话则会去Hibernate的二级缓存中去查找对象,仍未找到的话才会去数据库中去查找;但是get()方法不会去查找Hibernate的二级缓存。(有关Hibernate缓存机制的问题,参见文章:http://blog.csdn.net/yu422560654/article/details/7008654   转载滴大笑

 

3、update()方法

Hibernate学习——Hibernate的核心接口与类_第5张图片

 

4、delete()方法

Hibernate学习——Hibernate的核心接口与类_第6张图片

四、Transaction(事务)接口

Hibernate学习——Hibernate的核心接口与类_第7张图片

五、Query接口

Hibernate学习——Hibernate的核心接口与类_第8张图片

6六、Criteria接口

Hibernate学习——Hibernate的核心接口与类_第9张图片


你可能感兴趣的:(Hibernate学习——Hibernate的核心接口与类)