Hibernate创建执行sql的具体实现 java

4. 创建执行sql的具体实现

一般在工作中,只需要创建前面三种即可,然后通过对应的servic类去调用比如:getSession().save();getSession().update();方法等等,但是如果没有写sql执行类,我们就需要自己写(即getSession().save()背后的逻辑实现),这个没有什么好说的,基本上不会有任何改动,使用时直接复制就行。

package com.fhb.egms.dao;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;

import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.transform.AliasToEntityMapResultTransformer;

public class ApplicationDaoSupport {
	
	private SessionFactory sessionFactory;

	public SessionFactory getSessionFactory() {
		return sessionFactory;
	}

	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}

	protected Session getSession() {
		return sessionFactory.getCurrentSession();
	}

	protected List find(String hql) {
		Query query = getSession().createQuery(hql);

		return query.list();
	}

	protected List findByNamedParam(String hql, String paramName, Object value) {
		String[] paramNames = { paramName };
		Object[] values = { value };

		return findByNamedParam(hql, paramNames, values);
	}

	protected List findByNamedParam(String hql, String[] paramNames,
			Object[] values, int maxResult) {
		
		Query query = getSession().createQuery(hql);

		if (maxResult > 0) {
			query.setMaxResults(maxResult);
		}
	
		// Set named parameters
		if (paramNames != null || values != null) {
			// validation
			if (paramNames != null && values == null) {
				throw new RuntimeException(
						"executeNativeSQL - values is null while namedParams is not");
			} else if (paramNames == null && values != null) {
				throw new RuntimeException(
						"executeNativeSQL - namedParams is null while values is not");
			} else if (paramNames.length != values.length) {
				throw new RuntimeException(
						"executeNativeSQL - namedParams.length is not equal to values.length");
			} else if (paramNames.length > 0) {
				for (int i = 0; i < paramNames.length; i++) {
					
					if (values[i] instanceof Collection) {
						query.setParameterList(paramNames[i], (Collection<?>) values[i]);
						
					} else if (values[i] instanceof Object[]) {	
						query.setParameterList(paramNames[i], (Object[]) values[i]);

					} else {
						query.setParameter(paramNames[i], values[i]);
					}
				}
			}
		}
		
		return query.list();
	}
	
	protected List findByNamedParam(String hql, String[] paramNames,
			Object[] values) {
		return findByNamedParam(hql, paramNames, values, -1);
	}

	public List<Object> findQuery(StringBuilder sql, List<String> paramName,
			List<Object> paramList) {

		List<Object> queryResult = executeNativeSQL(sql.toString(),
				paramName.toArray(new String[0]), paramList.toArray());

		return queryResult;
	}

	public List<Object> findQuery(String sql, List<String> paramName,
			List<Object> paramList) {

		List<Object> queryResult = executeNativeSQL(sql,
				paramName.toArray(new String[0]), paramList.toArray());

		return queryResult;
	}

	public int updateQuery(StringBuilder sql, List<String> paramName,
			List<Object> paramList) {

		return executeNativeSQLUpdate(sql.toString(),
				paramName.toArray(new String[0]), paramList.toArray());

	}

	public int hqlQuery(StringBuilder hql, List<String> paramName,
			List<Object> paramList) {

		return hqlQuery(hql.toString(), paramName, paramList);
	}

	public int hqlQuery(String hql, List<String> paramName,
			List<Object> paramList) {

		Session session = getSession();
		Query query = session.createQuery(hql.toString());

		// Set named parameters
		if (paramName != null || paramList != null) {
			// validation
			if (paramName != null && paramList == null) {
				throw new RuntimeException(
						"executeNativeSQLUpdate - values is null while namedParams is not");
			} else if (paramName == null && paramList != null) {
				throw new RuntimeException(
						"executeNativeSQLUpdate - namedParams is null while values is not");
			} else if (paramName.size() != paramList.size()) {
				throw new RuntimeException(
						"executeNativeSQLUpdate - namedParams.length is not equal to values.length");
			} else if (paramName.size() > 0) {
				for (int i = 0; i < paramName.size(); i++) {
					query.setParameter(paramName.get(i), paramList.get(i));
				}
			}
		}

		return query.executeUpdate();
	}

	public Object save(Object obj) {

		Object obj1 = null;

		obj1 = getSession().save(obj);

		return obj1;

	}

	public Object get(Class cls, Serializable str) {

		return getSession().get(cls, str);

	}

	public List loadAll(Class cls, String table) {

		List lst = null;

		lst = find(table);

		return lst;
	}

	public int setSessionMaxGroupConcatLength(int length) {
		Session session = getSession();

		String setSql = "SET SESSION group_concat_max_len = :length";

		SQLQuery sqlQuery = session.createSQLQuery(setSql);
		sqlQuery.setParameter("length", length);

		return sqlQuery.executeUpdate();
	}

	protected int executeNativeSQLUpdate(String sql, String[] namedParams,
			Object[] values) throws RuntimeException {
		Session session = getSession();
		SQLQuery sqlQuery = session.createSQLQuery(sql.toString());
		flush();
		// Set named parameters
		if (namedParams != null || values != null) {
			// validation
			if (namedParams != null && values == null) {
				throw new RuntimeException(
						"executeNativeSQLUpdate - values is null while namedParams is not");
			} else if (namedParams == null && values != null) {
				throw new RuntimeException(
						"executeNativeSQLUpdate - namedParams is null while values is not");
			} else if (namedParams.length != values.length) {
				throw new RuntimeException(
						"executeNativeSQLUpdate - namedParams.length is not equal to values.length");
			} else if (namedParams.length > 0) {
				for (int i = 0; i < namedParams.length; i++) {
					sqlQuery.setParameter(namedParams[i], values[i]);
				}
			}
		}

		return sqlQuery.executeUpdate();
	}

	@SuppressWarnings("unchecked")
	protected List<Object> executeNativeSQL(String sql, String[] namedParams,
			Object[] values) throws RuntimeException {
		Session session = getSession();
		SQLQuery sqlQuery = session.createSQLQuery(sql.toString());
		flush();
		// Set named parameters
		if (namedParams != null || values != null) {
			// validation
			if (namedParams != null && values == null) {
				throw new RuntimeException(
						"executeNativeSQL - values is null while namedParams is not");
			} else if (namedParams == null && values != null) {
				throw new RuntimeException(
						"executeNativeSQL - namedParams is null while values is not");
			} else if (namedParams.length != values.length) {
				throw new RuntimeException(
						"executeNativeSQL - namedParams.length is not equal to values.length");
			} else if (namedParams.length > 0) {
				for (int i = 0; i < namedParams.length; i++) {
					sqlQuery.setParameter(namedParams[i], values[i]);
				}
			}
		}

		return sqlQuery.list();
	}

	protected int executeNativeUpdateSQL(String sql, String[] namedParams,
			Object[] values) throws RuntimeException {
		Session session = getSession();
		SQLQuery sqlQuery = session.createSQLQuery(sql.toString());
		flush();
		// Set named parameters
		if (namedParams != null || values != null) {
			// validation
			if (namedParams != null && values == null) {
				throw new RuntimeException(
						"executeNativeSQL - values is null while namedParams is not");
			} else if (namedParams == null && values != null) {
				throw new RuntimeException(
						"executeNativeSQL - namedParams is null while values is not");
			} else if (namedParams.length != values.length) {
				throw new RuntimeException(
						"executeNativeSQL - namedParams.length is not equal to values.length");
			} else if (namedParams.length > 0) {
				for (int i = 0; i < namedParams.length; i++) {
					sqlQuery.setParameter(namedParams[i], values[i]);
				}
			}
		}

		return sqlQuery.executeUpdate();
	}

	@SuppressWarnings("unchecked")
	protected List<Object> executeNativeSQLWithParamList(String sql,
			String[] namedParams, List<Object> values) throws RuntimeException {
		Session session = getSession();
		SQLQuery sqlQuery = session.createSQLQuery(sql.toString());
		flush();
		// Set named parameters
		if (namedParams != null || values != null) {
			// validation
			if (namedParams != null && values == null) {
				throw new RuntimeException(
						"executeNativeSQL - values is null while namedParams is not");
			} else if (namedParams == null && values != null) {
				throw new RuntimeException(
						"executeNativeSQL - namedParams is null while values is not");
			} else if (namedParams.length != values.size()) {
				throw new RuntimeException(
						"executeNativeSQL - namedParams.length is not equal to values.length");
			} else if (namedParams.length > 0) {
				for (int i = 0; i < namedParams.length; i++) {
					sqlQuery.setParameterList(namedParams[i],
							(Collection) values.get(i));
				}
			}
		}

		return sqlQuery.list();
	}

	protected Object executeNativeSQLWithUniqueResult(String sql,
			String[] namedParams, Object[] values) throws RuntimeException {
		Session session = getSession();
		SQLQuery sqlQuery = session.createSQLQuery(sql.toString());
		flush();
		// Set named parameters
		if (namedParams != null || values != null) {
			// validation
			if (namedParams != null && values == null) {
				throw new RuntimeException(
						"executeNativeSQL - values is null while namedParams is not");
			} else if (namedParams == null && values != null) {
				throw new RuntimeException(
						"executeNativeSQL - namedParams is null while values is not");
			} else if (namedParams.length != values.length) {
				throw new RuntimeException(
						"executeNativeSQL - namedParams.length is not equal to values.length");
			} else if (namedParams.length > 0) {
				for (int i = 0; i < namedParams.length; i++) {
					sqlQuery.setParameter(namedParams[i], values[i]);
				}
			}
		}
		return sqlQuery.uniqueResult();
	}

	protected void flush() {
		getSession().flush();
	}

	public List<Map<String, Object>> findQueryToMap(StringBuilder sql,
			List<String> paramName, List<Object> paramList) {

		List<Map<String, Object>> queryResult = executeNativeSQLToMap(
				sql.toString(), paramName.toArray(new String[0]),
				paramList.toArray());

		return queryResult;
	}

	@SuppressWarnings("unchecked")
	protected List<Map<String, Object>> executeNativeSQLToMap(String sql,
			String[] namedParams, Object[] values) throws RuntimeException {
		Session session = getSession();
		SQLQuery sqlQuery = session.createSQLQuery(sql.toString());

		// add by peter
		sqlQuery.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);

		// Set named parameters
		if (namedParams != null || values != null) {
			// validation
			if (namedParams != null && values == null) {
				throw new RuntimeException(
						"executeNativeSQL - values is null while namedParams is not");
			} else if (namedParams == null && values != null) {
				throw new RuntimeException(
						"executeNativeSQL - namedParams is null while values is not");
			} else if (namedParams.length != values.length) {
				throw new RuntimeException(
						"executeNativeSQL - namedParams.length is not equal to values.length");
			} else if (namedParams.length > 0) {
				for (int i = 0; i < namedParams.length; i++) {
					sqlQuery.setParameter(namedParams[i], values[i]);
				}
			}
		}
		getSession().flush();
		return sqlQuery.list();
	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值