echibernateentitydao.java
来自「anewssystem新闻发布系统集成使用了spring hibernate f」· Java 代码 · 共 136 行
JAVA
136 行
package anni.core.dao;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.Set;
import anni.core.dao.hibernate.HibernateEntityDao;
import anni.core.dao.support.Page;
import anni.core.utils.GenericsUtils;
import org.hibernate.Query;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
/**
* 负责为单个Entity对象提供CRUD操作的Hibernate DAO基类.
* <p/>
* 子类只要在类定义时指定所管理Entity的Class, 即拥有对单个Entity对象的CRUD操作.
* <pre>
* public class UserManager extends HibernateEntityDao<User< {
* }
* </pre>
* 来自www.springside.org.cn
*
* @author calvin
* @since 2007-03-30
* @version 1.0
* @param <T> 实体类
*/
public class ECHibernateEntityDao<T> extends HibernateEntityDao<T>
implements EntityDao<T> {
/**
* 分页查找.
*
* @param pageNo 页码
* @param pageSize 每页大小
* @return Page
*/
public Page pagedQuery(int pageNo, int pageSize) {
return pagedQuery(pageNo, pageSize, null, null);
}
/**
* 根据过滤条件和排序条件,分页查找.
*
* @param pageNo 页码
* @param pageSize 每页大小
* @param filterMap 过滤条件
* @param sortMap 排序条件
* @return Page
*/
public Page pagedQuery(int pageNo, int pageSize, Map filterMap,
Map sortMap) {
Assert.isTrue(pageNo >= 1, "pageNo should start from 1");
// Count查询
String countQueryString = "select count (*) from "
+ getEntityClass().getName() + " t";
String selectQueryString = "from " + getEntityClass().getName()
+ " t";
countQueryString += makeFilter(filterMap);
selectQueryString += (makeFilter(filterMap) + makeSort(sortMap));
List countlist = getHibernateTemplate().find(countQueryString);
long totalCount = (Long) countlist.get(0);
if (totalCount < 1) {
return new Page();
}
// 实际查询返回分页对象
int startIndex = Page.getStartOfPage(pageNo, pageSize);
Query query = getSession().createQuery(selectQueryString);
List list = query.setFirstResult(startIndex).setMaxResults(pageSize)
.list();
return new Page(startIndex, totalCount, pageSize, list);
}
/**
* 根据过滤条件,拼接hql需要的where语句.
* name与value的关系是name like '%value'
* 如果filterMap为空,返回空字符串,避免返回null
*
* @param filterMap 过滤条件
* @return String 返回结果
*/
protected String makeFilter(Map filterMap) {
if (!CollectionUtils.isEmpty(filterMap)) {
StringBuffer buff = new StringBuffer(" where ");
for (Map.Entry entry : (Set<Map.Entry>) filterMap.entrySet()) {
buff.append("t.").append(entry.getKey()).append(" like '%")
.append(entry.getValue()).append("%' and ");
}
buff.delete(buff.length() - " and ".length(), buff.length());
return buff.toString();
} else {
return "";
}
}
/**
* 根据排序条件,拼接hql需要的order by语句.
* 如果sortMap为空,返回空字符串,避免返回null
*
* @param sortMap 排序条件
* @return String 返回结果
*/
protected String makeSort(Map sortMap) {
if (!CollectionUtils.isEmpty(sortMap)) {
StringBuffer buff = new StringBuffer(" order by ");
for (Map.Entry entry : (Set<Map.Entry>) sortMap.entrySet()) {
buff.append("t.").append(entry.getKey()).append(" ")
.append(entry.getValue()).append(",");
}
buff.delete(buff.length() - 1, buff.length());
return buff.toString();
} else {
return "";
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?