论坛首页 入门技术论坛

自己写的BaseDAO,希望指点一下

浏览 4843 次
该帖已经被评为新手帖
作者 正文
   发表时间:2007-07-04  
DAO
import cn.com.background.dao.IBaseDAO;
import cn.com.background.entity.BaseEntity;

import org.springframework.dao.DataAccessException;
import org.springframework.orm.hibernate.support.HibernateDaoSupport;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Query;
import net.sf.hibernate.Session;
import org.springframework.orm.hibernate.HibernateCallback;

import java.util.ArrayList;
import java.util.List;

abstract public class BaseDAO extends HibernateDaoSupport implements IBaseDAO {
	/**
	 * 取得总长
	 */
    public int getRows(String query) throws Exception {
        List result = this.getHibernateTemplate().find("select count(*) " + query);
        return Integer.parseInt(result.get(0).toString());
    }

    /**
     * 根据id取得实体
     * @param id
     * @return
     * @throws org.springframework.dao.DataAccessException
     */
    public BaseEntity load(Long id) throws DataAccessException {
        return (BaseEntity) this.getHibernateTemplate().load(this.getEntityClass(), id);
    }

    /**
     * 增加,更新实体
     * @param entity
     * @throws org.springframework.dao.DataAccessException
     */
    public void store(BaseEntity entity) throws DataAccessException {
        this.getHibernateTemplate().save(entity);
    }


    public void update(BaseEntity entity) throws DataAccessException {
        this.getHibernateTemplate().update(entity);
    }
    /**
     * 根据id 更新实体
     * @param id
     * @throws org.springframework.dao.DataAccessException
     */
    public void update(Long id) throws DataAccessException {
        BaseEntity entity = this.load(id);
        this.getHibernateTemplate().update(entity);
    }

    /**
     * 根据实体删除实体
     * @param entity
     * @throws org.springframework.dao.DataAccessException
     */
    public void delete(BaseEntity entity) throws DataAccessException {
        this.getHibernateTemplate().delete(entity);
    }

    /**
     * 根据id 删除实体
     * @param id
     * @throws org.springframework.dao.DataAccessException
     */
    public void delete(Long id) throws DataAccessException {
        BaseEntity entity = this.load(id);
        this.getHibernateTemplate().delete(entity);
    }

    /**
     * Tao J 回的
     * 查找全部实体
     * @see IBaseDAO#getAll()
     */
    public List getAll() {
        return getHibernateTemplate().loadAll(getEntityClass());
    }
    
    /**
     * 根据sql返回List数组
     */
    public List getAll(String query){
    	return this.getHibernateTemplate().find(query);
    }
    /**
     * Tao J 回的
     * 查找全部实体 (分页)
     * @see IBaseDAO#getAll()
     */
    public List getAll(final int pageSize, final int startRow,final String querys) {
      return (List) getHibernateTemplate().execute(new HibernateCallback() {
          public Object doInHibernate(Session session) {
              List result = null;
              try {
                  Query query = session.createQuery(querys);
                  query.setFirstResult(startRow);
                  query.setMaxResults(pageSize);
                  result = query.list();
              } catch (HibernateException e) {
                  e.printStackTrace();
              }
              if (null == result) {
                  return new ArrayList();
              } else {
                  return result;
              }
          }
      });
    }

    /**
     * 取得实体类型的抽象方法
     * 需要具体类实现
     * @return
     */
    abstract protected Class getEntityClass();
}
   发表时间:2007-07-04  
public void update(Long id) throws DataAccessException {  
         BaseEntity entity = this.load(id);  
         this.getHibernateTemplate().update(entity);  
     }

这个方法太诡异了...感觉啥也没做啊!
0 请登录后投票
   发表时间:2007-07-04  
为什么诡异`??
0 请登录后投票
   发表时间:2007-07-04  
不好意思`我自己写多了一个`刚刚看出来这段是浪费 没有任何意义
0 请登录后投票
   发表时间:2007-07-04  
说实话,这种程度的封装意义不大,和直接用spring提供的HibernateTemplate没啥区别。
附:public List getAll(final int pageSize, final int startRow,final String querys)方法除外,因为它提供了分页功能,而spring的接口都是没用这种功能的
0 请登录后投票
   发表时间:2007-07-04  
BaseEntity是一个类?or接口?
应该是个mark interface吧
如果是个类的话,强制所有实体要继承这个类,将仅有的继承用在这上面没什么好处吧。

我觉的springside项目中利用泛型写的HibernateGenericDao才是正道
0 请登录后投票
   发表时间:2007-07-05  
BaseEntity 是一个类,这个类里面一个id参数
而我所有的实体类都继承这个类
0 请登录后投票
   发表时间:2007-10-16  
dennis_zane 写道
BaseEntity是一个类?or接口?
应该是个mark interface吧
如果是个类的话,强制所有实体要继承这个类,将仅有的继承用在这上面没什么好处吧。

我觉的springside项目中利用泛型写的HibernateGenericDao才是正道


对于域模型设计,基本上只会出现单根继承,所以完全没有问题。
真需要交叉时,用bridge解决也很好。
0 请登录后投票
论坛首页 入门技术版

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