hibernate系列三:hibernate工具类及使用

来源:互联网 发布:mac文件夹属性隐藏 编辑:程序博客网 时间:2024/06/03 04:26

在项目开发过程中,通常使用工具类来管理SessionFactory和Session,代码如下所示。

package com.obtk.utils;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;public class HibernateUtil {private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();    private  static Configuration configuration = new Configuration();        private static org.hibernate.SessionFactory sessionFactory;    private static String configFile = "/hibernate.cfg.xml";static {    try {configuration.configure(configFile);sessionFactory = configuration.buildSessionFactory();} catch (Exception e) {System.err.println("%%%% Error Creating SessionFactory %%%%");e.printStackTrace();}    }    private HibernateUtil() {    }    //获得session对象    public static Session getSession() throws HibernateException {        Session session = (Session) threadLocal.get();if (session == null || !session.isOpen()) {if (sessionFactory == null) {rebuildSessionFactory();}session =sessionFactory.openSession();threadLocal.set(session);}        return session;    }    //重新建立session工厂public static void rebuildSessionFactory() {try {configuration.configure(configFile);sessionFactory = configuration.buildSessionFactory();} catch (Exception e) {System.err.println("%%%% Error Creating SessionFactory %%%%");e.printStackTrace();}}//关闭session    public static void closeSession() throws HibernateException {        Session session = (Session) threadLocal.get();        threadLocal.set(null);        if (session != null) {            session.close();        }    }public static SessionFactory getSessionFactory() {return sessionFactory;}public static void setConfigFile(String configFile) {HibernateUtil.configFile = configFile;sessionFactory = null;}public static Configuration getConfiguration() {return configuration;}}

==========================================

用hibernateUtil工具类改造前面的程序如下:

package com.obtk.test;import java.util.List;import org.hibernate.HibernateException;import org.hibernate.Query;import org.hibernate.Session;import com.obtk.entitys.UserEntity;import com.obtk.utils.HibernateUtil;public class TestHql01 {public static void main(String[] args) {Session session=null;String hqlSql="from UserEntity";try {//获得数据库链接session=HibernateUtil.getSession();//获得一个查询接口Query qy=session.createQuery(hqlSql);//得到结果List<UserEntity> userList=qy.list();for(UserEntity user : userList){System.out.println(user.getUserName()+","+user.getEmail());}} catch (HibernateException e) {e.printStackTrace();}finally{HibernateUtil.closeSession();}}}