自己对于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) 编辑 收藏 举报