Dorado7 MultiHibernateDao.java McfBaseDAO 多数据源支持(单Hibernate双数据库)

Dorado7 MultiHibernateDao.java McfBaseDAO 多数据源支持(单Hibernate双数据库),第1张

Dorado7 MultiHibernateDao.java McfBaseDAO 多数据源支持(单Hibernate双数据库)

单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;
		}
	}
}

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zaji/5583502.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-14
下一篇2022-12-14

发表评论

登录后才能评论

评论列表(0条)

    保存