Hibernate通用Dao设计。

  hibernate的通用Dao简化了程序,增加了开发过程,但是通用Dao设计五花八门,我也是一个Hibernate初学者,把我参考一些设计好的Dao而设计的通用Dao写下来,希望各位不要见笑。
  原来的Dao是一个整体,把很多内容放在一起,但是发现大部分的内容用不到,所以我把Dao分为三个部分,BaseHibernateEntityDao(基本部分)主要是,增删查改。ExtensionHibernateEntityDao(扩展)包括example等,HibernateEntityDaoUtil(工具部分),包括执行Sql等。
 
  package com.guestbook.dao;

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

import com.guestbook.dao.support.Page;

public interface BaseHibernateEntityDao<T> {
    public void setCacheable(boolean cacheable);
	
	public T get(Serializable id);
	public T load(Serializable id);	

	public void save(Object o);	
	public void update(Object o);
	public void remove(Serializable id);
	
	public List<T> findByHql(String hql, Object... values);
	public List<T> findBySql(String sql,Object... values);
	
	public T findUniqueByHql(String hql, Object... values);
	public T findUniqueBySql(String sql,Object... values);
	
    public Page<T> pagedSqlQuery(String sql,int pageNo,int pageSize,Object...values);	
	public Page<T> pagedQuery(String hql,int pageNo,int pageSize,Object...values);
	
}

  


package com.guestbook.dao;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.criterion.Criterion;

import com.guestbook.dao.support.Page;

public interface ExtensionHibernateEntityDao<T> extends
		BaseHibernateEntityDao<T> {

	public T findByName(String name, Object value);

	public List<T> findByLike(String name, Object value);

	public T findUniqueByName(String name, Object value);

	public T findUniqueByExample(T t);
	
	public Page<T> pagedQuery(Criteria criteria, int pageNo, int pageSize);

	public Page<T> pagedQuery(int pageNo, int pageSize, Criterion... criterions);

	public Page<T> pagedQuery(int pageNo, int pageSize, String orderBy,
			boolean isAsc, Criterion... criterions);
}



package com.guestbook.dao;

import java.util.List;

public interface HibernateEntityDaoUtil {
	public int executeSql(String sql, Object... values);
	public int executeHql(String sql, Object... values);
	
	@SuppressWarnings("unchecked")
	public List findBySql(String sql, boolean cacheable,Class entityClass,Object... values);
	
	@SuppressWarnings("unchecked")
	public Object findUniqueBySql(String sql,Class entityClass,Object... values);
}


 
 
  这样就可以当只是简单的应用的时候就是用Base部分,而如果功能比较复杂则可以使用扩展部分的内容。
  当然我理解还不是很深入,不知道有没有什么更好的设计。
  具体代码见附件。

猜你喜欢

转载自azure2a.iteye.com/blog/1128097