package com.ule.dao.impl;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.CriteriaSpecification;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.ProjectionList;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.hibernate.transform.Transformers;
import org.springframework.stereotype.Repository;
import com.ule.dao.IBaseDao;
import com.ule.model.BaseEntity;
import com.ule.util.ListRange;
import com.ule.util.ReflectUtils;
@Repository
@SuppressWarnings({ "unchecked" })
public class BaseDao<T extends BaseEntity> implements IBaseDao<T> {
protected Log log = LogFactory.getLog(this.getClass());
@Resource
protected SessionFactory sessionFactory;
protected Class<T> entityClass;
/**
* 在构造函数中利用反射机制获得参数T的具体类
*/
public BaseDao() {
entityClass = ReflectUtils.getClassGenricType(getClass());
log.info(entityClass.getName());
}
public boolean delete(T domain) {
try {
sessionFactory.getCurrentSession().delete(domain);
return true;
} catch (Exception e) {
log.error(e.toString());
return false;
}
}
public List<Map<String, Object>> findBySql(String sql, Object[] objects) {
Query query = sessionFactory.getCurrentSession().createSQLQuery(sql)
.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
for (int i = 0; i < objects.length; i++) {
query.setString(i, objects[i].toString());
}
List<Map<String, Object>> maps = query.list();
return maps;
}
public List<Map<String, Object>> findBySql(String sql, Object[] objects,
int firstResult, int maxResults) {
Query query = sessionFactory.getCurrentSession().createSQLQuery(sql)
.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
for (int i = 0; i < objects.length; i++) {
query.setString(i, objects[i].toString());
}
query.setFirstResult(firstResult);
query.setMaxResults(maxResults);
List<Map<String, Object>> maps = query.list();
return maps;
}
public List<T> findAll() {
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(
entityClass);
return criteria.list();
}
public List<T> findAll(int firstResult, int maxResults) {
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(
entityClass);
return criteria.setFirstResult(firstResult).setMaxResults(maxResults)
.list();
}
public T findById(int id) {
return (T) sessionFactory.getCurrentSession().get(entityClass, id);
}
public List<T> findByProperty(Map<String, Object> params) {
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(
entityClass);
criteria.add(Restrictions.allEq(params));
return criteria.list();
}
public List<T> findByProperty(Map<String, Object> params, int firstResult,
int maxResults) {
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(
entityClass);
criteria.add(Restrictions.allEq(params));
return criteria.setFirstResult(firstResult).setMaxResults(maxResults)
.list();
}
public List<T> findIn(String propertyName, Collection<Object> values) {
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(
entityClass);
criteria.add(Restrictions.in(propertyName, values));
return criteria.list();
}
public List<T> fuzzyFindByProperty(Map<String, Object> params) {
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(
entityClass);
for (String key : params.keySet()) {
criteria.add(Restrictions.like(key, params.get(key)));
}
return criteria.list();
}
// 检索满足标准的数据
public List<T> findByCriteria(DetachedCriteria detachedCriteria) {
Criteria criteria = detachedCriteria
.getExecutableCriteria(sessionFactory.getCurrentSession());
return criteria.list();
}
// 分组统计
public List<Object> findGroupByProperty(Map<String, Object> params) {
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(
entityClass);
ProjectionList prolist = Projections.projectionList();
prolist.add(Projections.groupProperty("typeInfo"));
prolist.add(Projections.sum("productStorage"), "productStorage");
criteria.setProjection(prolist);
criteria.add(Restrictions.allEq(params));
return criteria.list();
}
// 检索满足标准的数据,返回指定范围的记录
public List<T> findByCriteria(DetachedCriteria detachedCriteria,
int firstResult, int maxResults) {
Criteria criteria = detachedCriteria
.getExecutableCriteria(sessionFactory.getCurrentSession());
return criteria.setFirstResult(firstResult).setMaxResults(maxResults)
.list();
}
public int getCount(Map<String, Object> params) {
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(
entityClass);
for (String key : params.keySet()) {
criteria.add(Restrictions.like(key, params.get(key)));
}
criteria.setProjection(Projections.rowCount());
return Integer.parseInt(criteria.uniqueResult().toString());
}
public int getCount(DetachedCriteria detachedCriteria) {
Criteria criteria = detachedCriteria
.getExecutableCriteria(sessionFactory.getCurrentSession());
int total = Integer.parseInt(criteria
.setProjection(Projections.rowCount()).uniqueResult()
.toString());
criteria.setProjection(null);
criteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY);
return total;
}
public T save(T domain) {
try {
domain.setCreationDate(new Date());
sessionFactory.getCurrentSession().save(domain);
return domain;
} catch (Exception e) {
log.error(e.toString());
return null;
}
}
public T update(T domain) {
try {
domain.setModificationDate(new Date());
sessionFactory.getCurrentSession().update(domain);
return domain;
} catch (Exception e) {
log.error(e.toString());
return null;
}
}
public void visible(int id, boolean flag) {
T entity = findById(id);
entity.setVisible(flag);
update(entity);
}
public ListRange<T> findPageByCriteria(DetachedCriteria detachedCriteria,
int firstResult, int maxResults) {
Criteria criteria = detachedCriteria
.getExecutableCriteria(sessionFactory.getCurrentSession());
int totalSize = Integer.parseInt(criteria
.setProjection(Projections.rowCount()).uniqueResult()
.toString());
criteria.setProjection(null);
criteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY);
List<T> list = criteria.setFirstResult(firstResult)
.setMaxResults(maxResults).list();
ListRange<T> listRange = new ListRange<T>();
listRange.setList(list);
listRange.setTotalSize(totalSize);
return listRange;
}
public int getCount(String sql, Object[] objects) {
Query query = sessionFactory.getCurrentSession().createSQLQuery(sql)
.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
for (int i = 0; i < objects.length; i++) {
query.setString(i, objects[i].toString());
}
List<Map<String, Object>> list = query.list();
if(list.size()>0){
return Integer.parseInt(list.get(0).get("total").toString());
}
else
return 0;
}
}
java泛型BaseDao与BaseService
5星 · 超过95%的资源 需积分: 50 143 浏览量
2012-04-07
16:28:35
上传
评论 4
收藏 7KB ZIP 举报
WSQ458542323976
- 粉丝: 8
- 资源: 19
最新资源
- 基于JAVA-JSP的现代数字化电子政务网管理系统论文-20240403更新
- 西部钻探工程有限公司安全环保问责管理办法.doc
- Using Model-Based Design to Develop SOA Applications
- PHP Decrypt跨平台解密PHP源码的扩展
- SimHei MAC字体资源
- 2024全国行政区域编码
- 数据源-数据可视化(七):Pandas香港酒店数据高级分析,涉及相关系数,协方差,数据离散化,透视表等精美可视化展示
- linux常用命令大全.doc
- 格拉斯哥大学空缺职位申请详细介绍Applicant Guide.pdf
- mmexport1702953347189.mp4
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
- 4
- 5
- 6
前往页