一个根本通用的查询dao接口及实现(包括分页)
一个基本通用的查询dao接口及实现(包括分页)
因为很简单,所以没有写增加、更新、删除。
DAO接口:
写道
/**
* 根据条件返回客源实体或字段的集合 若只需要客源实体集合,则可将projectionList=null
*
* @param offset 从第offset条数据开始查询
* @param rowsToReturn 返回rowsToReturn条数据
* @param projectionList
* @param orders
* @param criterias
* @return
* @throws DataAccessException
*/
public Collection<?> getBeansOrFieldsByCriterias(final int offset,final int rowsToReturn, final ProjectionList projectionList,final List<Order> orders, final List criterias, final Class clazz) throws DataAccessException;
/**
* 根据所给的条件列表,查询房源实体数
*
* @param criterias
* @return
* @throws DataAccessException
*/
public int findCountByCriteria(final List criterias, final Class clazz)throws DataAccessException;
* 根据条件返回客源实体或字段的集合 若只需要客源实体集合,则可将projectionList=null
*
* @param offset 从第offset条数据开始查询
* @param rowsToReturn 返回rowsToReturn条数据
* @param projectionList
* @param orders
* @param criterias
* @return
* @throws DataAccessException
*/
public Collection<?> getBeansOrFieldsByCriterias(final int offset,final int rowsToReturn, final ProjectionList projectionList,final List<Order> orders, final List criterias, final Class clazz) throws DataAccessException;
/**
* 根据所给的条件列表,查询房源实体数
*
* @param criterias
* @return
* @throws DataAccessException
*/
public int findCountByCriteria(final List criterias, final Class clazz)throws DataAccessException;
DAO实现:
写道
/**
* 根据条件返回客源实体或字段的集合 若只需要客源实体集合,则可将projectionList=null
*
* @param offset 从第offset条数据开始查询
* @param rowsToReturn 返回rowsToReturn条数据
* @param projectionList
* @param orders
* @param criterias
* @return
* @throws DataAccessException
*/
public Collection<?> getBeansOrFieldsByCriterias(final int offset,final int rowsToReturn, final ProjectionList projectionList,final List<Order> orders, final List criterias, final Class clazz)throws DataAccessException
{
return (Collection<?>) his.getHibernateTemplate().execute(
new HibernateCallback()
{
public Object doInHibernate(Session session)
{
Criteria crit = session.createCriteria(clazz);
if (null != projectionList) {
crit.setProjection(projectionList);
}
if (null != criterias) {
for (Iterator<Criteria> iterator = (Iterator<Criteria>) criterias.iterator(); iterator.hasNext();) {
Criterion c = (Criterion) iterator.next();
if (c != null) {
crit.add(c);
}
}
}
if (0 != offset) {
crit.setFirstResult(offset);
}
if (rowsToReturn > 0) {
crit.setMaxResults(rowsToReturn);
crit.setFetchSize(RESULT_FETCH_SIZE);
}
if (null != orders) {
for (Iterator<Order> iterator = orders.iterator(); iterator
.hasNext();) {
Order order = (Order) iterator.next();
crit.addOrder(order);
}
}
List<?> list = crit.list();
return list;
}
});
}
/**
* 根据所给的条件列表,查询房源实体数
*
* @param criterias
* @return
* @throws DataAccessException
*/
public int findCountByCriteria(final List criterias, final Class clazz)
throws DataAccessException {
return (Integer) getHibernateTemplate().execute(
new HibernateCallback() {
public Object doInHibernate(Session session) {
Criteria crit = session.createCriteria(clazz);
if (null != criterias) {
for (Iterator<Criteria> iterator = (Iterator<Criteria>) criterias
.iterator(); iterator.hasNext();) {
Criterion c = (Criterion) iterator.next();
if (c != null) {
crit.add(c);
}
}
}
return Integer.parseInt(crit.setProjection(
Projections.rowCount()).uniqueResult()
.toString());
}
});
}
* 根据条件返回客源实体或字段的集合 若只需要客源实体集合,则可将projectionList=null
*
* @param offset 从第offset条数据开始查询
* @param rowsToReturn 返回rowsToReturn条数据
* @param projectionList
* @param orders
* @param criterias
* @return
* @throws DataAccessException
*/
public Collection<?> getBeansOrFieldsByCriterias(final int offset,final int rowsToReturn, final ProjectionList projectionList,final List<Order> orders, final List criterias, final Class clazz)throws DataAccessException
{
return (Collection<?>) his.getHibernateTemplate().execute(
new HibernateCallback()
{
public Object doInHibernate(Session session)
{
Criteria crit = session.createCriteria(clazz);
if (null != projectionList) {
crit.setProjection(projectionList);
}
if (null != criterias) {
for (Iterator<Criteria> iterator = (Iterator<Criteria>) criterias.iterator(); iterator.hasNext();) {
Criterion c = (Criterion) iterator.next();
if (c != null) {
crit.add(c);
}
}
}
if (0 != offset) {
crit.setFirstResult(offset);
}
if (rowsToReturn > 0) {
crit.setMaxResults(rowsToReturn);
crit.setFetchSize(RESULT_FETCH_SIZE);
}
if (null != orders) {
for (Iterator<Order> iterator = orders.iterator(); iterator
.hasNext();) {
Order order = (Order) iterator.next();
crit.addOrder(order);
}
}
List<?> list = crit.list();
return list;
}
});
}
/**
* 根据所给的条件列表,查询房源实体数
*
* @param criterias
* @return
* @throws DataAccessException
*/
public int findCountByCriteria(final List criterias, final Class clazz)
throws DataAccessException {
return (Integer) getHibernateTemplate().execute(
new HibernateCallback() {
public Object doInHibernate(Session session) {
Criteria crit = session.createCriteria(clazz);
if (null != criterias) {
for (Iterator<Criteria> iterator = (Iterator<Criteria>) criterias
.iterator(); iterator.hasNext();) {
Criterion c = (Criterion) iterator.next();
if (c != null) {
crit.add(c);
}
}
}
return Integer.parseInt(crit.setProjection(
Projections.rowCount()).uniqueResult()
.toString());
}
});
}
QBC的这种方式很灵活,用着挺舒服的