浏览 4844 次
锁定老帖子 主题:自己写的BaseDAO,希望指点一下
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-07-04
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(); } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-07-04
public void update(Long id) throws DataAccessException { BaseEntity entity = this.load(id); this.getHibernateTemplate().update(entity); } 这个方法太诡异了...感觉啥也没做啊! |
|
返回顶楼 | |
发表时间:2007-07-04
为什么诡异`??
|
|
返回顶楼 | |
发表时间:2007-07-04
不好意思`我自己写多了一个`刚刚看出来这段是浪费 没有任何意义
|
|
返回顶楼 | |
发表时间:2007-07-04
说实话,这种程度的封装意义不大,和直接用spring提供的HibernateTemplate没啥区别。
附:public List getAll(final int pageSize, final int startRow,final String querys)方法除外,因为它提供了分页功能,而spring的接口都是没用这种功能的 |
|
返回顶楼 | |
发表时间:2007-07-04
BaseEntity是一个类?or接口?
应该是个mark interface吧 如果是个类的话,强制所有实体要继承这个类,将仅有的继承用在这上面没什么好处吧。 我觉的springside项目中利用泛型写的HibernateGenericDao才是正道 |
|
返回顶楼 | |
发表时间:2007-07-05
BaseEntity 是一个类,这个类里面一个id参数
而我所有的实体类都继承这个类 |
|
返回顶楼 | |
发表时间:2007-10-16
dennis_zane 写道 BaseEntity是一个类?or接口?
应该是个mark interface吧 如果是个类的话,强制所有实体要继承这个类,将仅有的继承用在这上面没什么好处吧。 我觉的springside项目中利用泛型写的HibernateGenericDao才是正道 对于域模型设计,基本上只会出现单根继承,所以完全没有问题。 真需要交叉时,用bridge解决也很好。 |
|
返回顶楼 | |