构建单态的sessionfactory

SessionFactory 接口负责Hibernate的初始化和建立Session对象。它在Hibernate中启到一个缓冲区的作用,hibernate可以将自动生成的SQL 语句、映射数据以及某些可重复利用的数据放在这个缓冲区中。同时它还保存了对数据库配置的所有映射关系,维护了当前的二级缓存。

    SessionFactory具有以下特点:

(1)它是线程安全的,它的同一实例能够供多个线程共享。

(2它是重量级的,不能随意的创建和销毁它的实例。

由于SessionFactory的这些特点,一般情况下,一个项目只需要一个SessionFactory,只有当应用中存在多个数据源时,才为每个数据源建立一个SessionFactory实例。因此,在实际项目使用中,通常会抽取一个HibernateUtils的工具类,用来提供SessionFactory对象。

    代码如下:

[html] view plain copy
  1. package cn.Unit;  
  2. import org.hibernate.Session;  
  3. import org.hibernate.SessionFactory;  
  4. import org.hibernate.cfg.Configuration;  
  5.   
  6. public class HibernateUtils {  
  7.   
  8.     //声明一个私有的静态 final 类型的 Configuration 对象  
  9.     private static final Configuration config;   
  10.     //声明一个私有的静态 final 类型的 SessionFactory 对象  
  11.     private static final SessionFactory factory;      
  12.     //通过静态代码块构建 SessionFactory  
  13.     static{  
  14.         config = new Configuration().configure();  
  15.         factory = config.buildSessionFactory();   
  16.     }  
  17.     public static Session  getSession(){  
  18.         return factory.openSession();  
  19.     }  
  20. }  

实现增删改查操作:

(1)增加

[html] view plain copy
  1. package cn.test;     
  2. import org.hibernate.Session;    
  3. import org.hibernate.SessionFactory;    
  4. import org.hibernate.Transaction;    
  5. import org.hibernate.cfg.Configuration;    
  6. import cn.Unit.HibernateUtils;  
  7. import cn.domain.Student;    
  8.    
  9. public class Add {    
  10.     public static void main(String[] args) {        
  11.          Session session = HibernateUtils.getSession();  
  12.          Transaction tx = null;    
  13.          try{    
  14.         tx = session.beginTransaction();        
  15.         Student stu = new Student();    
  16.         stu.setName("lisi");    
  17.         stu.setAge(21);    
  18.         session.save(stu);    
  19.         tx.commit();         
  20.           }catch(Exception e){    
  21.         if (null!=tx){tx.rollback();}    
  22.         e.printStackTrace();          
  23.           }   
  24.     }    
[html] view plain copy
  1. }  
(2)修改
[html] view plain copy
  1. package cn.test;      
  2. import org.hibernate.Session;    
  3. import org.hibernate.SessionFactory;    
  4. import org.hibernate.Transaction;    
  5. import org.hibernate.cfg.Configuration;    
  6. import cn.Unit.HibernateUtils;  
  7. import cn.domain.Student;    
  8.     
  9. public class Edit {    
  10.     public static void main(String[] args) {    
  11.          Session session = HibernateUtils.getSession();  
  12.          Transaction tx = null;    
  13.          try{    
  14.         tx = session.beginTransaction();  
  15.         //把id为2的  姓名  zhangsan改为wangwu  年龄  20改为30  
  16.         Student stu = (Student)session.get(Student.class,new Integer(1));  
  17.         stu.setName("wangwu");    
  18.         stu.setAge(30);    
  19.         session.update(stu);    
  20.         tx.commit();   
  21.           
  22.           }catch(Exception e){    
  23.         if (null!=tx){tx.rollback();}    
  24.         e.printStackTrace();          
  25.           }   
  26.     }    
  27. }    


(3)查询

[html] view plain copy
  1. package cn.test;    
  2. import org.hibernate.Session;    
  3. import org.hibernate.SessionFactory;    
  4. import org.hibernate.Transaction;    
  5. import org.hibernate.cfg.Configuration;    
  6.   
  7. import cn.Unit.HibernateUtils;  
  8. import cn.domain.Student;    
  9.     
  10. public class FindById {    
  11.     public static void main(String[] args) {    
  12.          Session session = HibernateUtils.getSession();  
  13.          Transaction tx = null;    
  14.          try{    
  15.         tx = session.beginTransaction();  
  16.         //查找id为2的学生信息,并输出在控制台  
  17.         Student stu = (Student)session.get(Student.class,new Integer(2));  
  18.         System.out.println("姓名:"+stu.getName());  
  19.         System.out.println("年龄:"+stu.getAge());  
  20.         tx.commit();   
  21.           }catch(Exception e){    
  22.         if (null!=tx){tx.rollback();}    
  23.         e.printStackTrace();          
  24.           }    
  25.     }    
  26. }    


(4)删除

[html] view plain copy
  1. package cn.test;      
  2. import org.hibernate.Session;    
  3. import org.hibernate.SessionFactory;    
  4. import org.hibernate.Transaction;    
  5. import org.hibernate.cfg.Configuration;    
  6. import cn.Unit.HibernateUtils;  
  7. import cn.domain.Student;    
  8.     
  9. public class Delete {    
  10.     public static void main(String[] args) {    
  11.         Session session = HibernateUtils.getSession();  
  12.         Transaction tx = null;    
  13.         tx = session.beginTransaction();    
  14.         //删除id为2的学生  
  15.         Student stu = (Student)session.get(Student.class,new Integer(2));  
  16.         session.delete(stu);  
  17.         tx.commit();   
  18.            
  19.     }    
  20. }    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值