前言:使用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