我的hibernate通用dao層

1.BaseDao類:底層的dao接口,提供最基本的CRUD和分頁


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

import com.xxx.utils.PageUtil;

public interface BaseDao<E> {
	public void saveEntity(E e);  

	public void updateEntity(E e);  

	public void deleteEntity(E e);
	
	public void deleteEntityById(Serializable id);

	public E loadEntity(final Class<E> class1, final Serializable id);

	public E loadEntityById(Serializable id);

	public List<E> loadListEntities(PageUtil page);
}

2.BaseDaoImpl類:BaseDao的實現類

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.sql.SQLException;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.xxx.utils.PageUtil;

public class BaseDaoImpl<E> extends HibernateDaoSupport implements BaseDao<E> {
	
	private Class cls;   
	
	
	public BaseDaoImpl(){
		// 就是要獲取E的真實數據類型
		this.cls =  (Class<E>)((ParameterizedType)this.getClass().getGenericSuperclass())
        .getActualTypeArguments()[0];
		
	}


	public void saveEntity(E e) {
		this.getHibernateTemplate().save(e);
		
	}


	public void updateEntity(E e) {
		this.getHibernateTemplate().update(e);
		
	}


	public void deleteEntity(E e) {
		this.getHibernateTemplate().delete(e);
		
	}


	public E loadEntity(final Class<E> class1,final Serializable id){
		return this.getHibernateTemplate().get(class1, id);
		
	}

	@SuppressWarnings("unchecked")
	public E loadEntityById(Serializable id) {
		return (E) loadEntity(cls,id);
	}


	@SuppressWarnings("unchecked")
	public List<E> loadListEntities(final PageUtil page) {
		return this.getHibernateTemplate().executeFind(new HibernateCallback<List<E>>() {
			public List<E> doInHibernate(Session session) throws HibernateException, SQLException {
				Long totalL = (Long) session.createQuery("select count(*) from "+page.getModelName()).uniqueResult();
				page.setTotalCount(totalL.intValue());
				return session.createQuery("from " +page.getModelName())
						.setFirstResult((page.getPageNow()-1)*page.getPageSize())
						.setMaxResults(page.getPageSize()).list();
			}
		});
	}

	public void deleteEntityById(Serializable id) {
		deleteEntity(loadEntityById(id));
	}

	
}

3.UserDao:User對應的dao接口

import com.xxx.model.User;
public interface UserDao extends BaseDao<User>{
    //這裏還可以自己添加特殊的接口
}

4.UserDaoImpl:UserDao的實現類

import org.springframework.stereotype.Component;

import com.xxx.model.User;
@Component("userDao")   //Spring的註解給新手的說明哦
public class UserDaoImpl extends BaseDaoImpl<User> implements UserDao{
    //這裏還可以自己添加特殊的接口的實現
}

5.PageUtil,自己寫得分頁輔助類,爲hibernate的分頁使用

import org.springframework.stereotype.Component;

@Component("page")  //spring註解,交給spring管理師最好不過的了,因爲是單例嘛,呵呵
public class PageUtil {
	private static PageUtil page = null;
	private String modelName;   //實體名字,比如User,就是寫User
	private int pageNow;        //當前頁
	private int pageSize;       //每頁顯示個數
	private int totalCount;     //總數

	private PageUtil() {

	}

	public int getPages() {     //獲取總頁數
		return totalCount % pageSize == 0 ? totalCount / pageSize : totalCount / pageSize + 1;
	}

	public static PageUtil getInstance() {
		if (null == page) {
			page = new PageUtil();
		}
		return page;
	}

	public static PageUtil getPage() {
		return page;
	}

	public static void setPage(PageUtil page) {
		PageUtil.page = page;
	}

	public String getModelName() {
		return modelName;
	}

	public void setModelName(String modelName) {
		this.modelName = modelName;
	}

	public int getPageNow() {
		return pageNow;
	}

	public void setPageNow(int pageNow) {
		this.pageNow = pageNow;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getTotalCount() {
		return totalCount;
	}

	public void setTotalCount(int totalCount) {
		this.totalCount = totalCount;
	}

}

以上就是個人的通用dao層,只是給大家拋磚,希望大俠們給點意見

至於ssh的引入jar包和各配置文件,請關注我另外的文章,謝謝


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章