自己对于DAO层的封装

在写程序时,有时每个模块都写一个DAO显然过于麻烦,因此,希望写一个通用的DAO,各个模块中的DAO,只需要继承它,然后再加上模块中的特殊逻辑即可。

注意:既然为了多个模块的操作,那么用到类类型的地方,都要定义为Object类型:

增加:

public void save(Object o) {
getHibernateTemplate().saveOrUpdate(o);
}


修改:

public void update(final Object entity) {
getHibernateTemplate().update(entity);
}


删除:

public void remove(Object o) {
getHibernateTemplate().delete(o);
}



多条件删除:

public void delete(String hqlDelete, Object[] parameter) {
Query query = this.getSession().createQuery(hqlDelete);
for (int i = 0; i < parameter.length; i++) {
query.setParameter(i, parameter[i]);
}
query.executeUpdate();
}

在sevice层只要:

Object[] params = new Object[2];
params[0] = synRecord.getRecordId();
params[1] = synRecord.getName();

//删除
synRecordDao.delete("delete from SynRecord s where s.recordId=? and s.name=?", params);

即可。



查找:

/**
* 分页查询

* @param hql 查询的条件
* @param offset 开始记录
* @param length 一次查询几条记录
* @return
*/
public List queryForPage(final String hql, final int offset, final int length) {
List list = getHibernateTemplate().executeFind(new HibernateCallback() {

public Object doInHibernate(Session session) throws HibernateException, SQLException {
Query query = session.createQuery(hql);
query.setFirstResult(offset);
query.setMaxResults(length);
List list = query.list();
return list;
}
});
return list;
}


/**
* 分页查询

* @param hql 查询的条件
* @return
*/
public int getAllRowCount(final String hql) {
Integer result = (Integer)getHibernateTemplate().execute(new HibernateCallback() {

public Object doInHibernate(Session session) throws HibernateException, SQLException {
String sql = " select count (*) " + removeSelect(removeOrders(hql));
Query query = session.createQuery(sql);
Long lCount = (Long)(query.list().get(0));
if (lCount == null)
lCount = new Long(0);
return lCount.intValue();
}
});

return result;
}



posted on 2012-07-19 14:28  java课程设计例子  阅读(257)  评论(0编辑  收藏  举报