1.BaseDao類:底層的dao接口,提供最基本的CRUD和分頁
[java] view plain copy
- 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的實作類
[java] view plain copy
- 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接口 [java] view plain copy
- import com.xxx.model.User;
- public interface UserDao extends BaseDao<User>{
- //這裡還可以自己添加特殊的接口
- }
4.UserDaoImpl:UserDao的實作類 [java] view plain copy
- import org.springframework.stereotype.Component;
- import com.xxx.model.User;
- @Component("userDao") //Spring的注解給新手的說明哦
- public class UserDaoImpl extends BaseDaoImpl<User> implements UserDao{
- //這裡還可以自己添加特殊的接口的實作
- }
5.PageUtil,自己寫得分頁輔助類,為hibernate的分頁使用
[java] view plain copy
- 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包和各配置檔案,請關注我另外的文章,謝謝