论坛首页 Java企业应用论坛

ssh2 DAO接口再抽象

浏览 2218 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-12-11   最后修改:2010-04-25

GenericDao.java

 

/** 基于泛型的通用Dao接口 */
public interface GenericDao<T, ID extends Serializable> {
	void create(T entity);  //增
	void delete(T entity);  //删
	void update(T entity);  //改
	
	T findById(ID id);       //根据Id查询
	List<T> findAll();       //查询所有
	List<T> findList(int pageNo, int pageSize);  //分页查询所有
	int getTotal();           //获取所有实体数量
}

 GenericHibernateDaoImpl.java

 

/** Hibernate对通用的Dao接口的实现 */
public class GenericHibernateDaoImpl<T,ID extends Serializable>
     implements GenericDao<T,ID> {
	private Class<T> clazz;
	@SuppressWarnings("unchecked")
	public GenericHibernateDaoImpl() {
		//通过反射获取T的类型信息实例
		this.clazz = (Class<T>)((ParameterizedType)this.getClass()
								.getGenericSuperclass())
							    .getActualTypeArguments()[0];
	}
	public void create(T entity) {   //create方法的实现
		HibernateUtil.getSession().save(entity);
	}
	public void delete(T entity) {    //delete方法的实现
		HibernateUtil.getSession().delete(entity);
	}
	@SuppressWarnings("unchecked")
	public void update(T entity) {    //update方法的实现
		//HibernateUtil.getSession().saveOrUpdate(entity);
		entity = (T) HibernateUtil.getSession().merge(entity);
	}
	@SuppressWarnings("unchecked")
	public T findById(ID id) {    //findById方法的实现
		return (T)HibernateUtil.getSession().load(clazz, id); //get
	}
	@SuppressWarnings("unchecked")
	public List<T> findAll() {     //findAll方法的实现
		return HibernateUtil.getSession().createCriteria(clazz).list();
	}
	@SuppressWarnings("unchecked")
	public List<T> findList(int pageNo, int pageSize) {    //分页查询
		return HibernateUtil.getSession()
						.createCriteria(clazz)
					   .setFirstResult((pageNo - 1) * pageSize)
					   .setMaxResults(pageSize)
					   .list();
	}
	public int getTotal() {    //获取总记录数
		Integer count = (Integer) HibernateUtil.getSession()
						          .createCriteria(clazz)
								.setProjection(Projections.rowCount())
								.uniqueResult();
		if (null == count) {
			return 0;
		} else {
			return count.intValue();
		}
	}
}

 参考文章:http://tech.it168.com/j/2007-12-27/200712271701173_1.shtml

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics