zhenghao111
9/11/2012 - 1:41 PM

Hibernate工具类

Hibernate工具类

package com.zh.util;

import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;


final public class HibernateUtil {
	
	private static SessionFactory sessionFactory = null;
	private static ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
	
	private HibernateUtil(){}
	
	static{
		sessionFactory = new Configuration().configure().buildSessionFactory();
	}
	
	//获取全新的Session
	public static Session openSession() {
		return sessionFactory.openSession();
	}
	
	//获取和线程关联的Session
	public static Session getCurrentSession() {
		Session session = threadLocal.get();
		if(session==null) {
			session = sessionFactory.openSession();
			threadLocal.set(session);
		}
		return session;
	}
	
	//提供统一的查询方法
	public static List executeQuery(String hql, String[] parameters) {
		
		Session session = openSession();
		List list = null;
		
		try {
			Query query = session.createQuery(hql);
			if(parameters!=null && parameters.length>0){
				for (int i = 0; i < parameters.length; i++) {
					query.setString(i, parameters[i]);
				}
			}
			list = query.list();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally{
			
		}if(session!=null && session.isOpen()) {
			session.close();
		}
		return list;
	}
	
	//提供统一带分页的查询方法
	
	
	
	//统一的添加方法
	public static void save(Object obj) {
		Session session = null;
		Transaction tx = null;
		try {
			session = openSession();
			tx = session.beginTransaction();
			session.save(obj);
			tx.commit();
		} catch (Exception e) {
			e.printStackTrace();
			if(tx!=null) {
				tx.rollback();
			}
		}finally {
			if(session!=null && session.isOpen()) {
				session.close();
			}
		}
	}
	
	//统一的修改和删除(批量 hql)
	public static void executeUpdate(String hql, String [] parameters) {
		Session session = openSession();
		Transaction tx = null;
		List list = null;
		
		try {
			tx = session.beginTransaction();
			Query query = session.createQuery(hql);
			if(parameters!=null && parameters.length>0){
				for (int i = 0; i < parameters.length; i++) {
					query.setString(i, parameters[i]);
				}
			}
			query.executeUpdate();
			tx.commit();
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			if(tx!=null) {
				tx.rollback();
			}
		}finally{
			
		}if(session!=null && session.isOpen()) {
			session.close();
		}
	}
}