hibernate API在業務層的封裝和使用
來源:互聯網
上載者:User
為了建立,初始化,和調用全域的sessionFactory執行個體,我們使用HibernateUtil類可以將Hibernate API封裝起來,減少重複代碼的書寫,也使得程式看起來更簡潔明了 package ... import ... public class HibernateUtil { private static Log log = LogFactory.getLog(HibernateUtil.class); private static Configuration configuration; private static SessionFactory sessionFactory; static { try { configuration = new Configuration(); sessiongFactory = configuration.().configure().buildSessionFactory(); } catch(Throwable ex) { log.error(ex.getMessage()); throw new ExceptionInInitializeError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; } public static Configuration getConfiguration() { return configuration; } public static void rebuildSessionFactory() { Synchronized(sessiongFactory) { try{ sessionfFactory=getConfiguration().buildSessionFactory(); } catch(Exception ex) { log.error(ex.getMessage()); throw DatastoreException.datastoreError(ex); } } } public static void rebuildSessionFactory(Configuration cfg) { Synchronized(sessiongFactory) { try{ sessionfFactory= cfg.buildSessionFactory(); configuration = cfg; } catch(Exception ex) { log.error(ex.getMessage()); throw DatastoreException.datastoreError(ex); } } } public static void close(){ try{ sessionFactory.close(); } catch(Exception ex) { log.error(ex.getMessage()); } } //下面是程式中最常用的session的開啟,關閉和復原 public static Session getSession() throws DatastoreException{ try { return sessionFactory.openSession(); }catch(Exception ex) { log.error(ex.getMessage()); throw DatastoreException.datastoreError(ex); } } public static void closeSession(Session session) throws DatastoreException { try{ session.close(); } catch(Exception ex){ log.error(ex.getMessage()); throw DatastoreException.datastoreError(ex); } } public static void rollbackTransaction(Transaction transaction) throws DatastoreException { try{ if(transaction != null) transaction.rollback(); } catch(Exception ex){ log.error(ex.getMessage()); throw DatastoreException.datastoreError(ex); } } } 封裝後的使用的例子: Session session = HibernateUtil.getSession(); Transaction tx = null; try { tx = session.beginTransaction(); //hibernate資料庫操作 Query query = session.createQuery... tx.commit(); } catch(Exception ex) { HibernateUtil.rollbackTransaction(ex); throw DatastoreException.datastoreError(ex); } finally { HibernateUtil.closeSession(session); }