⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 defaultbasedaoimpl.java

📁 快速FLEX+J2EE开发工具。具体自动生成功能代码功能。
💻 JAVA
字号:
package cn.org.pomer.dao;

import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.lang.StringUtils;
import org.hibernate.Query;
import org.hibernate.ScrollableResults;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.util.Assert;

import cn.org.pomer.domain.BaseEntity;
import cn.org.pomer.page.PageRequest;
import cn.org.pomer.page.PageResponse;

/**
 * 
 * @author Linlin Yu
 *
 * @param <E>
 */
public abstract class DefaultBaseDaoImpl<E extends BaseEntity> extends
		HibernateDaoSupport implements BaseDao<E> {

	public void delete(Long id) {
		try {
			Object entity = findById(id);
			getHibernateTemplate().delete(entity);
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException("Delete Error: " + e.getMessage());
		}
		
	}

	public PageResponse<E> findAll(PageRequest pageRequest) {
		PageResponse<E> pageResponse = new PageResponse<E>();
		StringBuffer hql = new StringBuffer();
		hql.append(" FROM ").append(getEntityClass().getSimpleName());
		String defalutOrderFileds = getDefalutOrderFileds();
		if (StringUtils.isNotEmpty(defalutOrderFileds)) {
			hql.append(" order by " + defalutOrderFileds);
		}

		String queryString = hql.toString();
		Query query = getSession().createQuery(queryString);

		// 取总数
		Long count = getHQLReulstCount(hql.toString());
		pageResponse.setTotalCount(count);

		// 取结果
		query.setFirstResult(pageRequest.getStart());
		query.setMaxResults(pageRequest.getLimit());
		pageResponse.setList(query.list());

		pageResponse.setStart(pageRequest.getStart() + 1);
		pageResponse.setEnd(pageResponse.getStart()+pageResponse.getList().size() - 1);
		

		return pageResponse;
	}

	public List<E> findAll() {
		StringBuffer hql = new StringBuffer();
		hql.append(" FROM ").append(getEntityClass().getName());
		String defalutOrderFileds = getDefalutOrderFileds();
		if (StringUtils.isNotEmpty(defalutOrderFileds)) {
			hql.append(" order by " + defalutOrderFileds);
		}

		String queryString = hql.toString();
		return getHibernateTemplate().find(queryString);
	}

	protected abstract Class getEntityClass();

	protected String getDefalutOrderFileds() {
		return null;
	}

	public List<E> findByExample(E instance) {
		List results = getHibernateTemplate().findByExample(instance);
		return results;
	}

	public E findById(Long id) {
		E entity = (E) getHibernateTemplate().get(getEntityClass(), id);
		return entity;
	}

	public List<E> findByProperty(String propertyName, Object value) {
		if (value != null) {
			String queryString = "from " + getEntityClass().getName()
					+ " as model where model." + propertyName + "= ?";
			return getHibernateTemplate().find(queryString, value);
		} else {
			String queryString = "from " + getEntityClass().getName()
					+ " as model where model." + propertyName + " is null";
			return getHibernateTemplate().find(queryString);
		}
	}

	public PageResponse<E> findByProperty1(String propertyName, Object value,
			PageRequest pageRequest) {
		PageResponse<E> pageResponse = new PageResponse<E>();
		if (value != null) {
			String queryString = "from " + getEntityClass().getName()
					+ " as model where model." + propertyName + "= :value";
			Query query = getSession().createQuery(queryString);
			query.setEntity("value", value);

			// 取总数
			Long totalCount = getHQLReulstCount(queryString);
			pageResponse.setTotalCount(totalCount);

			query.setFirstResult(pageRequest.getStart());
			query.setMaxResults(pageRequest.getLimit());
			pageResponse.setList(query.list());

			pageResponse.setStart(pageRequest.getStart() + 1);
			pageResponse.setEnd(pageResponse.getStart()+pageResponse.getList().size() - 1);

			return pageResponse;
		} else {
			String queryString = "from " + getEntityClass().getName()
					+ " as model where model." + propertyName + " is null";

			Query query = getSession().createQuery(queryString);

			// 取总数
			Long count = getHQLReulstCount(queryString.toString());
			pageResponse.setTotalCount(count);

			query.setFirstResult(pageRequest.getStart());
			query.setMaxResults(pageRequest.getLimit());
			
			pageResponse.setList(query.list());
			pageResponse.setStart(pageRequest.getStart() + 1);
			pageResponse.setEnd(pageResponse.getStart()+pageResponse.getList().size() - 1);
			return pageResponse;
		}
	}

	public E insert(E entity) {
		getHibernateTemplate().save(entity);
		return entity;
	}

	public E update(E entity) {
		getHibernateTemplate().merge(entity);
		return entity;
	}

	/**
	 * 返回给定HQL语句的记录总条数
	 * 
	 * @param hql
	 * @return
	 */
	protected Long getHQLReulstCount(String hql) {
		String countSql = removeSelect(hql);
		countSql = removeOrders(countSql);
		countSql = removeFetchKeyword(countSql);
		countSql = " select count(*) " + countSql;
		Query query = getSession().createQuery(countSql);

		Long count = (Long) query.uniqueResult();
		return count;
	}

	/**
	 * 返回给定SQL语句的记录总条数
	 * 
	 * @param hql
	 * @return
	 */
	protected Long getSQLReulstCount(String hql) {
		String countSql = removeSelect(hql);
		countSql = removeOrders(countSql);
		countSql = removeFetchKeyword(countSql);
		countSql = " select count(*) " + countSql;
		Query query = getSession().createSQLQuery(countSql);

		Long count = (Long) query.uniqueResult();
		return count;
	}

	/**
	 * 去除select 子句,未考虑union的情况
	 * 
	 * @param hql
	 * @return
	 */
	private static String removeSelect(String hql) {
		Assert.hasText(hql);
		int beginPos = hql.toLowerCase().indexOf("from");
		Assert.isTrue(beginPos != -1, " hql : " + hql
				+ " must has a keyword 'from'");
		return hql.substring(beginPos);
	}

	/**
	 * 去除orderby 子句
	 * 
	 * @param hql
	 * @return
	 */
	private static String removeOrders(String hql) {
		Assert.hasText(hql);
		Pattern p = Pattern.compile("order\\s*by[\\w|\\W|\\s|\\S]*",
				Pattern.CASE_INSENSITIVE);
		Matcher m = p.matcher(hql);
		StringBuffer sb = new StringBuffer();
		while (m.find()) {
			m.appendReplacement(sb, "");
		}
		m.appendTail(sb);
		return sb.toString();
	}

	private static String removeFetchKeyword(String hql) {
		return hql.replaceAll("(?i)fetch", "");
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -