构建单态模式的SessionFactory,并实现增删改查

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

    SessionFactory具有以下特点:

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

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

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

    代码如下:

package cn.Unit;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtils {

	//声明一个私有的静态 final 类型的 Configuration 对象
	private static final Configuration config; 
	//声明一个私有的静态 final 类型的 SessionFactory 对象
	private static final SessionFactory factory;	
	//通过静态代码块构建 SessionFactory
	static{
		config = new Configuration().configure();
		factory = config.buildSessionFactory(); 
	}
	public static Session  getSession(){
		return factory.openSession();
	}
}

实现增删改查操作:

(1)增加

package cn.test;   
import org.hibernate.Session;  
import org.hibernate.SessionFactory;  
import org.hibernate.Transaction;  
import org.hibernate.cfg.Configuration;  
import cn.Unit.HibernateUtils;
import cn.domain.Student;  
 
public class Add {  
    public static void main(String[] args) {      
    	 Session session = HibernateUtils.getSession();
         Transaction tx = null;  
         try{  
        tx = session.beginTransaction();      
        Student stu = new Student();  
        stu.setName("lisi");  
        stu.setAge(21);  
        session.save(stu);  
        tx.commit();       
          }catch(Exception e){  
        if (null!=tx){tx.rollback();}  
        e.printStackTrace();        
          } 
    }  
}
(2)修改

package cn.test;    
import org.hibernate.Session;  
import org.hibernate.SessionFactory;  
import org.hibernate.Transaction;  
import org.hibernate.cfg.Configuration;  
import cn.Unit.HibernateUtils;
import cn.domain.Student;  
  
public class Edit {  
    public static void main(String[] args) {  
    	 Session session = HibernateUtils.getSession();
         Transaction tx = null;  
         try{  
        tx = session.beginTransaction();
        //把id为2的  姓名  zhangsan改为wangwu  年龄  20改为30
        Student stu = (Student)session.get(Student.class,new Integer(1));
        stu.setName("wangwu");  
        stu.setAge(30);  
        session.update(stu);  
        tx.commit(); 
        
          }catch(Exception e){  
        if (null!=tx){tx.rollback();}  
        e.printStackTrace();        
          } 
    }  
}  


(3)查询

package cn.test;  
import org.hibernate.Session;  
import org.hibernate.SessionFactory;  
import org.hibernate.Transaction;  
import org.hibernate.cfg.Configuration;  

import cn.Unit.HibernateUtils;
import cn.domain.Student;  
  
public class FindById {  
    public static void main(String[] args) {  
    	 Session session = HibernateUtils.getSession();
         Transaction tx = null;  
         try{  
        tx = session.beginTransaction();
        //查找id为2的学生信息,并输出在控制台
        Student stu = (Student)session.get(Student.class,new Integer(2));
        System.out.println("姓名:"+stu.getName());
        System.out.println("年龄:"+stu.getAge());
        tx.commit(); 
          }catch(Exception e){  
        if (null!=tx){tx.rollback();}  
        e.printStackTrace();        
          }  
    }  
}  


(4)删除

package cn.test;    
import org.hibernate.Session;  
import org.hibernate.SessionFactory;  
import org.hibernate.Transaction;  
import org.hibernate.cfg.Configuration;  
import cn.Unit.HibernateUtils;
import cn.domain.Student;  
  
public class Delete {  
    public static void main(String[] args) {  
    	Session session = HibernateUtils.getSession();
        Transaction tx = null;  
        tx = session.beginTransaction();  
        //删除id为2的学生
        Student stu = (Student)session.get(Student.class,new Integer(2));
        session.delete(stu);
        tx.commit(); 
         
    }  
}  


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值