📄 defaultbasedaoimpl.java
字号:
package cn.org.pomer.dao;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang.StringUtils;
import org.hibernate.Query;
import org.hibernate.ScrollableResults;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.util.Assert;
import cn.org.pomer.domain.BaseEntity;
import cn.org.pomer.page.PageRequest;
import cn.org.pomer.page.PageResponse;
/**
*
* @author Linlin Yu
*
* @param <E>
*/
public abstract class DefaultBaseDaoImpl<E extends BaseEntity> extends
HibernateDaoSupport implements BaseDao<E> {
public void delete(Long id) {
try {
Object entity = findById(id);
getHibernateTemplate().delete(entity);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("Delete Error: " + e.getMessage());
}
}
public PageResponse<E> findAll(PageRequest pageRequest) {
PageResponse<E> pageResponse = new PageResponse<E>();
StringBuffer hql = new StringBuffer();
hql.append(" FROM ").append(getEntityClass().getSimpleName());
String defalutOrderFileds = getDefalutOrderFileds();
if (StringUtils.isNotEmpty(defalutOrderFileds)) {
hql.append(" order by " + defalutOrderFileds);
}
String queryString = hql.toString();
Query query = getSession().createQuery(queryString);
// 取总数
Long count = getHQLReulstCount(hql.toString());
pageResponse.setTotalCount(count);
// 取结果
query.setFirstResult(pageRequest.getStart());
query.setMaxResults(pageRequest.getLimit());
pageResponse.setList(query.list());
pageResponse.setStart(pageRequest.getStart() + 1);
pageResponse.setEnd(pageResponse.getStart()+pageResponse.getList().size() - 1);
return pageResponse;
}
public List<E> findAll() {
StringBuffer hql = new StringBuffer();
hql.append(" FROM ").append(getEntityClass().getName());
String defalutOrderFileds = getDefalutOrderFileds();
if (StringUtils.isNotEmpty(defalutOrderFileds)) {
hql.append(" order by " + defalutOrderFileds);
}
String queryString = hql.toString();
return getHibernateTemplate().find(queryString);
}
protected abstract Class getEntityClass();
protected String getDefalutOrderFileds() {
return null;
}
public List<E> findByExample(E instance) {
List results = getHibernateTemplate().findByExample(instance);
return results;
}
public E findById(Long id) {
E entity = (E) getHibernateTemplate().get(getEntityClass(), id);
return entity;
}
public List<E> findByProperty(String propertyName, Object value) {
if (value != null) {
String queryString = "from " + getEntityClass().getName()
+ " as model where model." + propertyName + "= ?";
return getHibernateTemplate().find(queryString, value);
} else {
String queryString = "from " + getEntityClass().getName()
+ " as model where model." + propertyName + " is null";
return getHibernateTemplate().find(queryString);
}
}
public PageResponse<E> findByProperty1(String propertyName, Object value,
PageRequest pageRequest) {
PageResponse<E> pageResponse = new PageResponse<E>();
if (value != null) {
String queryString = "from " + getEntityClass().getName()
+ " as model where model." + propertyName + "= :value";
Query query = getSession().createQuery(queryString);
query.setEntity("value", value);
// 取总数
Long totalCount = getHQLReulstCount(queryString);
pageResponse.setTotalCount(totalCount);
query.setFirstResult(pageRequest.getStart());
query.setMaxResults(pageRequest.getLimit());
pageResponse.setList(query.list());
pageResponse.setStart(pageRequest.getStart() + 1);
pageResponse.setEnd(pageResponse.getStart()+pageResponse.getList().size() - 1);
return pageResponse;
} else {
String queryString = "from " + getEntityClass().getName()
+ " as model where model." + propertyName + " is null";
Query query = getSession().createQuery(queryString);
// 取总数
Long count = getHQLReulstCount(queryString.toString());
pageResponse.setTotalCount(count);
query.setFirstResult(pageRequest.getStart());
query.setMaxResults(pageRequest.getLimit());
pageResponse.setList(query.list());
pageResponse.setStart(pageRequest.getStart() + 1);
pageResponse.setEnd(pageResponse.getStart()+pageResponse.getList().size() - 1);
return pageResponse;
}
}
public E insert(E entity) {
getHibernateTemplate().save(entity);
return entity;
}
public E update(E entity) {
getHibernateTemplate().merge(entity);
return entity;
}
/**
* 返回给定HQL语句的记录总条数
*
* @param hql
* @return
*/
protected Long getHQLReulstCount(String hql) {
String countSql = removeSelect(hql);
countSql = removeOrders(countSql);
countSql = removeFetchKeyword(countSql);
countSql = " select count(*) " + countSql;
Query query = getSession().createQuery(countSql);
Long count = (Long) query.uniqueResult();
return count;
}
/**
* 返回给定SQL语句的记录总条数
*
* @param hql
* @return
*/
protected Long getSQLReulstCount(String hql) {
String countSql = removeSelect(hql);
countSql = removeOrders(countSql);
countSql = removeFetchKeyword(countSql);
countSql = " select count(*) " + countSql;
Query query = getSession().createSQLQuery(countSql);
Long count = (Long) query.uniqueResult();
return count;
}
/**
* 去除select 子句,未考虑union的情况
*
* @param hql
* @return
*/
private static String removeSelect(String hql) {
Assert.hasText(hql);
int beginPos = hql.toLowerCase().indexOf("from");
Assert.isTrue(beginPos != -1, " hql : " + hql
+ " must has a keyword 'from'");
return hql.substring(beginPos);
}
/**
* 去除orderby 子句
*
* @param hql
* @return
*/
private static String removeOrders(String hql) {
Assert.hasText(hql);
Pattern p = Pattern.compile("order\\s*by[\\w|\\W|\\s|\\S]*",
Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(hql);
StringBuffer sb = new StringBuffer();
while (m.find()) {
m.appendReplacement(sb, "");
}
m.appendTail(sb);
return sb.toString();
}
private static String removeFetchKeyword(String hql) {
return hql.replaceAll("(?i)fetch", "");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -