開發積累—泛型工具類

weixin_33896726發表於2017-06-12

前言:使用SSH2中使用的泛型工具類,曾經寫泛型比較麻煩。

今天收集到一個工具類,好東呀!。分享給大家,絕對實用。JAVA版的web應用程式使用。

 

 

演示樣例程式碼:

import org.hibernate.HibernateException;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.Configuration;

/**

 *Hibernate工具類。用於獲取Session

 *@author Li Yongqiang

 */

public class HibernateUtils {

         //宣告SessionFactory物件

         privatestatic SessionFactory factory = null;

         //例項化ThreadLocal物件

         privatestatic final ThreadLocal<Session> threadLocal = newThreadLocal<Session>();

         //例項化Configuration物件

         privatestatic Configuration cfg = new Configuration();

         //靜態塊

         static{

                   try{

                            //載入Hibernate配置檔案

                            cfg.configure();

                            //例項化SessionFactory

                            factory= cfg.buildSessionFactory();

                   }catch (HibernateException e) {

                            e.printStackTrace();// 列印異常資訊

                   }

         }

         /**

          * 獲取Session物件

          * @return Session物件

          */

         publicstatic Session getSession() {

                   //從threadLocal中獲取Session

                   Sessionsession = (Session) threadLocal.get();

                   //推斷session是否為空或未處於開啟狀態

                   if(session == null || !session.isOpen()) {

                            if(factory == null) {

                                     rebuildSessionFactory();

                            }

                            //從factory開啟一個Session

                            session= (factory != null) ? factory.openSession() : null;

                            threadLocal.set(session);// 將session放入threadLocal中

                   }

                   returnsession;

         }

         /**

          * 獲取SessionFactory物件

          * @return SessionFactory物件

          */

         publicstatic SessionFactory getSessionFactory() {

                   returnfactory;

         }

         /**

          * 關閉Session

          * @param session物件

          */

         publicstatic void closeSession() {

                   //從threadLocal中獲取Session

                   Sessionsession = (Session) threadLocal.get();

                   //移除threadLocal中的物件

                   threadLocal.remove();

                   if(session != null) {

                            if(session.isOpen()) {

                                     session.close();// 關閉Session

                            }

                   }

         }

         /**

          * 建立SessionFactory物件

          */

         publicstatic void rebuildSessionFactory() {

                   try{

                            //載入Hibernate配置檔案

                            cfg.configure();

                            //例項化SessionFactory

                            factory= cfg.buildSessionFactory();

                   }catch (Exception e) {

                            e.printStackTrace();// 列印異常資訊

                   }

         }

}

 

使用場景程式碼;

public class DaoSupport<T> implementsBaseDao<T>{

         //泛型的型別

         protectedClass<T> entityClass = GenericsUtils.getGenericType(this.getClass());

         //Hibernate模板

         @Autowired

         protectedHibernateTemplate template;

        

         publicHibernateTemplate getTemplate() {

                   returntemplate;

         }

         @Override

         publicvoid delete(Serializable ... ids) {

                   for(Serializable id : ids) {

                            Tt = (T) getTemplate().load(this.entityClass, id);

                            getTemplate().delete(t);

                   }

         }

         /**

          * 利用get()方法載入物件。獲取物件的具體資訊

          */

         @Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)

         publicT get(Serializable entityId) {

                   return(T) getTemplate().get(this.entityClass, entityId);

         }

         /**

          * 利用load()方法載入物件,獲取物件的具體資訊

          */

         @Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)

         publicT load(Serializable entityId) {

                   return(T) getTemplate().load(this.entityClass, entityId);

         }

}

 

如有好的建議,可留言或發至筆者郵箱:fzb_xxzy@163.com

 

相關文章