
单Hibernate双数据库
MultiHibernateDao.java
package com.gs.oms.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import org.apache.commons.lang.StringUtils;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.stereotype.Repository;
import com.bstek.dorado.data.provider.Page;
import com.gs.mcf.common.McfbaseDAO;
@SuppressWarnings("rawtypes")
@Repository
public class MultiHibernateDao extends McfbaseDAO {
//like12 add,20151224,全局Session
private static Session sessionGlobal = null;
public void saveMulti(T entity) {
String entityName = this.getEntityName(entity);
Session session = this.getSessionMulti();
session.saveOrUpdate(entityName, entity);
session.flush();
session.clear();
}
public void excuteUpdate(final String hql, Object[] params) {
Query query = this.getSessionMulti().createQuery(hql);
if (params != null) {
int i = 0;
for (Object o : params) {
query.setParameter(i, o);
i++;
}
}
query.executeUpdate();
}
@SuppressWarnings("unchecked")
public X findUniqueMulti(String hql, Map parameters) {
return (X) createQueryMulti(hql, parameters).uniqueResult();
}
@SuppressWarnings("unchecked")
public List findMulti(String hql, Map parameters) {
return createQueryMulti(hql, parameters).list();
}
@SuppressWarnings("unchecked")
public Page findMulti(Page page, String hql, Map parameters) {
notNull(page, "page");
Query q = this.createQueryMulti(hql, parameters);
long totalCount = countHqlResultMulti(hql, parameters);
page.setEntityCount((int) totalCount);
setPageParameterToQuery(q, page);
page.setEntities(q.list());
return page;
}
public Query createQueryMulti(String queryString, Map parameters) {
Query query = this.getSessionMulti().createQuery(queryString);
if (parameters != null) {
query.setProperties(parameters);
}
return query;
}
protected long countHqlResultMulti(String hql, Map parameters) {
String countHql = generateCountHqlMulti(hql);
return ((Number) findUniqueMulti(countHql, parameters)).longValue();
}
private String generateCountHqlMulti(String hql) {
hql = "from " + StringUtils.substringAfter(hql, "from");
hql = StringUtils.substringBefore(hql, "order by");
String countHql = "select count(*) " + hql;
return countHql;
}
public Session getSessionMulti() {
//like12 modofied,20151224,每一次 增删改查 都要产生一次新的Session 数据库会很快死掉
if(sessionGlobal == null){
Properties prop = new Properties();
String driver = null;
String url = null;
String username = null;
String password = null;
Connection connection = null;
try{
//读配置文件
prop.load(this.getClass().getClassLoader().getResourceAsStream(
"DBConfigCygl.properties"));
driver = prop.getProperty("driver");
url = prop.getProperty("url");
username = prop.getProperty("username");
password = prop.getProperty("password");
Class.forName(driver);//1.加载驱动
connection = DriverManager.getConnection(url,username,password);//2.得到连接
}catch (Exception e){
e.printStackTrace();
}
//中途拦截,正规默认为:this.sessionFactory.openSession()
sessionGlobal = this.sessionFactory.openSession(connection);
}
//like12 add,20151228,bug,需清除上一次 *** 作的遗留信息,否则编辑不了
sessionGlobal.clear();
return sessionGlobal;
}
public void closeSessionMulti() {
if(sessionGlobal != null){
sessionGlobal.close();
//like12 add,20160302,bug,session被关闭后不是null 而是‘SessionImpl()’,下次将报错
sessionGlobal = null;
}
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)