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

📄 baseentitydaoimpl.java

📁 ext-demo,ext简单示例
💻 JAVA
字号:
/**
 * Copyright (c) http://www.hao-se.cn Ltd.,2007 All  rights  reserved.
 */
package cn.haose.dao.impl;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

import org.hibernate.criterion.CriteriaSpecification;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Projection;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.hibernate.impl.CriteriaImpl;
import org.hibernate.impl.CriteriaImpl.OrderEntry;
import org.springframework.util.Assert;

import cn.haose.dao.BaseEntityDAO;
import cn.haose.util.Page;

/**
 * 泛型实体DAO
 * 
 * @author hao-se.cn(好·色)
 */
public class BaseEntityDAOImpl<T> extends BaseGenericDAO<T> implements
		BaseEntityDAO<T> {

	/**
	 * spring配置中通过构造函数注射入具体类
	 * 
	 * @param type
	 */
	public BaseEntityDAOImpl(Class<T> type) {
		super(type);
		this.type = type;
	}

	/**
	 * 取得Entity的Criteria.
	 */
	protected DetachedCriteria getEntityDetachedCriteria() {
		return DetachedCriteria.forClass(type);
	}

	/*
	 * @see cn.haose.dao.BaseEntityDAO#findBy(java.lang.String,java.lang.Object)
	 */
	@SuppressWarnings("unchecked")
	public List<T> findBy(String name, Object value) {
		Assert.hasText(name);
		DetachedCriteria dc = getEntityDetachedCriteria();
		if (value == null) {
			dc.add((Restrictions.isNull(name)));
		} else {
			dc.add(Restrictions.eq(name, value));
		}
		return (List<T>) getHibernateTemplate().findByCriteria(dc);
	}

	/*
	 * @see cn.haose.dao.BaseEntityDAO#pagedQuery(org.hibernate.criterion.DetachedCriteria,int,int)
	 */
	@SuppressWarnings("unchecked")
	public Page pagedQuery(final DetachedCriteria dc, int pageNo, int pageSize) {

		Assert.notNull(dc, "DetachedCriteria must not be null");
		CriteriaImpl c = (CriteriaImpl) dc.getExecutableCriteria(getSession());
		// 先把Projection和OrderBy条件取出来,清空两者来执行Count操作
		Projection projection = c.getProjection();
		List<OrderEntry> orderEntries;
		Field field = null;
		boolean accessible = false;
		try {
			field = c.getClass().getDeclaredField("orderEntries");
			accessible = field.isAccessible();
			field.setAccessible(true);
			orderEntries = (List<OrderEntry>) field.get(c);
			field.set(c, new ArrayList());
			field.setAccessible(accessible);
		} catch (Exception e) {
			logger.error("BaseGenericDAO.findByCriteria方法中获得CriteriaImpl属性值时出错");
			throw new RuntimeException("服务器繁忙!");
		}
		int totalRow = ((Integer) c.setProjection(Projections.rowCount())
				.uniqueResult()).intValue();
		// 返回分页对象
		if (totalRow < 1) {
			return new Page();
		}

		// 将之前的Projection和OrderBy条件重新设回去
		c.setProjection(projection);
		if (projection == null) {
			c.setResultTransformer(CriteriaSpecification.ROOT_ENTITY);
		}
		try {
			field.setAccessible(true);
			field.set(c, orderEntries);
			field.setAccessible(accessible);
		} catch (Exception e) {
			logger.error("BaseGenericDAO.findByCriteria方法中设置CriteriaImpl属性值时出错");
			throw new RuntimeException("服务器繁忙!");
		}

		int startIndex = Page.getStartOfPage(pageNo, pageSize);
		List list = c.setFirstResult(startIndex).setMaxResults(pageSize).list();
		return new Page(startIndex, totalRow, pageSize, list);
	}
}

⌨️ 快捷键说明

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