hibernate API在业务层的封装和使用

 为了创建,初始化,和调用全局的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);
    }
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值