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包和各配置文件,請關注我另外的文章,謝謝