package com.jshoperx.dao.impl;
import java.io.Serializable;
import java.util.List;
import javax.annotation.Resource;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Repository;
import com.jshoperx.dao.BaseTDao;
@Repository("baseTDao")
public class BaseTDaoImpl<T> implements BaseTDao<T> {
private static final Logger log = LoggerFactory
.getLogger(BaseTDaoImpl.class);
@Resource
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
private Session getCurrentSession() {
return sessionFactory.getCurrentSession();
}
@Override
public void save(T t) {
this.getCurrentSession().save(t);
}
@SuppressWarnings("unchecked")
@Override
public T findByPK(Class<T> t, Serializable id) {
return (T) this.getCurrentSession().get(t, id);
}
@Override
public T getByHql(String hql, Object[] param) {
List<T> list = this.findByHql(hql, param);
if (list != null && list.size() > 0) {
return list.get(0);
} else {
return null;
}
}
@Override
public T get(Class<T> t, Serializable id) {
return (T) this.getCurrentSession().get(t, id);
}
@Override
public void saveOrUpdateAll(List<T> t) {
for (T param : t) {
this.getCurrentSession().saveOrUpdate(param);
}
}
@Override
public void saveOrUpdate(T t) {
this.getCurrentSession().saveOrUpdate(t);
}
@Override
public void update(T t) {
this.getCurrentSession().update(t);
}
@Override
public void delete(T t) {
this.getCurrentSession().delete(t);
}
@Override
public void deleteAll(List<T> param) {
for (T p : param) {
this.getCurrentSession().delete(p);
}
}
@SuppressWarnings("unchecked")
@Override
public List<T> findAll(Class<T> t, String status) {
Criteria criteria = this.getCurrentSession().createCriteria(t);
criteria.add(Restrictions.eq("status", status));
List<T> list = criteria.list();
return list;
}
@SuppressWarnings("unchecked")
@Override
public List<T> findAll(Class<T> t, int currentPage, int lineSize) {
if (currentPage < 1) {
currentPage = 1;
}
if (lineSize < 1) {
lineSize = 20;
}
Criteria criteria = this.getCurrentSession().createCriteria(t);
return criteria.setFirstResult((currentPage - 1) * lineSize)
.setMaxResults(lineSize).list();
}
@Override
public int countfindAll(Class<T> t) {
return (int) this.getCurrentSession().createCriteria(t).list().size();
}
@SuppressWarnings("unchecked")
@Override
public List<T> findAllByShopId(Class<T> t, String shopId, int currentPage,
int lineSize) {
if (currentPage < 1) {
currentPage = 1;
}
if (lineSize < 1) {
lineSize = 20;
}
Criteria criteria = this.getCurrentSession().createCriteria(t);
criteria.add(Restrictions.eq("shopId", shopId));
return criteria.setFirstResult((currentPage - 1) * lineSize)
.setMaxResults(lineSize).list();
}
@Override
public int countfindAllByShopId(Class<T> t, String shopId) {
return (int) this.getCurrentSession().createCriteria(t)
.add(Restrictions.eq("shopId", shopId)).uniqueResult();
}
@SuppressWarnings("unchecked")
@Override
public List<T> findByHql(String hql) {
return this.getCurrentSession().createQuery(hql).list();
}
@SuppressWarnings("unchecked")
@Override
public List<T> findByHql(String hql, Object[] param) {
Query query = this.getCurrentSession().createQuery(hql);
if (param != null && param.length > 0) {
int length = param.length;
for (int i = 0; i < length; i++) {
query.setParameter(i, param[i]);
}
}
return query.list();
}
@SuppressWarnings("unchecked")
@Override
public List<T> findByHql(String hql, List<Object> param) {
Query query = this.getCurrentSession().createQuery(hql);
if (param != null && param.size() > 0) {
int size = param.size();
for (int i = 0; i < size; i++) {
query.setParameter(i, param.get(i));
}
}
return query.list();
}
@SuppressWarnings("unchecked")
@Override
public List<T> findByHqlByPage(String hql, Object[] param, int currentPage,
int lineSize) {
if (currentPage < 1) {
currentPage = 1;
}
if (lineSize < 1) {
lineSize = 20;
}
Query query = this.getCurrentSession().createQuery(hql);
if (param != null && param.length > 0) {
int length = param.length;
for (int i = 0; i < length; i++) {
query.setParameter(i, param[i]);
}
}
return query.setFirstResult((currentPage - 1) * lineSize)
.setMaxResults(lineSize).list();
}
@SuppressWarnings("unchecked")
@Override
public List<T> findByHqlByPage(String hql, List<Object> param,
int currentPage, int lineSize) {
if (currentPage < 1) {
currentPage = 1;
}
if (lineSize < 1) {
lineSize = 20;
}
Query query = this.getCurrentSession().createQuery(hql);
if (param != null && param.size() > 0) {
int size = param.size();
for (int i = 0; i < size; i++) {
query.setParameter(i, param.get(i));
}
}
return query.setFirstResult((currentPage - 1) * lineSize)
.setMaxResults(lineSize).list();
}
@Override
public Long count(String hql) {
return (Long) this.getCurrentSession().createQuery(hql).uniqueResult();
}
@Override
public Long count(String hql, Object[] param) {
Query query = this.getCurrentSession().createQuery(hql);
if (param != null && param.length > 0) {
int length = param.length;
for (int i = 0; i < length; i++) {
query.setParameter(i, param[i]);
}
}
return (Long) query.uniqueResult();
}
@Override
public Long count(String hql, List<Object> param) {
Query query = this.getCurrentSession().createQuery(hql);
if (param != null && param.size() > 0) {
int size = param.size();
for (int i = 0; i < size; i++) {
query.setParameter(i, param.get(i));
}
}
return (Long) query.uniqueResult();
}
@Override
public Integer executeHql(String hql) {
return this.getCurrentSession().createQuery(hql).executeUpdate();
}
@Override
public Integer executeHql(String hql, Object[] param) {
Query query = this.getCurrentSession().createQuery(hql);
if (param != null && param.length > 0) {
int length = param.length;
for (int i = 0; i < length; i++) {
query.setParameter(i, param[i]);
}
}
return query.executeUpdate();
}
@Override
public Integer executeHql(String hql, List<Object> param) {
Query query = this.getCurrentSession().createQuery(hql);
if (param != null && param.size() > 0) {
int size = param.size();
for (int i = 0; i < size; i++) {
query.setParameter(i, param.get(i));
}
}
return query.executeUpdate();
}
@Override
public Long count(Class<T> t, Criterion criterion) {
Criteria criteria=this.getCurrentSession().createCriteria(t);
criteria.add(criterion);
return (long) criteria.list().size();
}
@SuppressWarnings("unchecked")
@Override
public List<T> findAll(Class<T> t) {
Criteria criteria = this.getCurrentSession().createCriteria(t);
List<T> list = criteria.list();
return list;
}
@SuppressWarnings("unchecked")
@Override
public List<T> findByCriteria(Class<T> t,Criterion criterion, Order order) {
return this.getCurrentSession().createCriteria(t)
.add(criterion).addOrder(order).list();
}
@SuppressWarnings("unchecked")
@Override
public List<T> findByCriteriaByPage(Class<T> t, Criterion criterion,Order order,
int currentPage, int lineSize) {
if (currentPage < 1) {
currentPage = 1;
}
if (lineSize < 1) {
lineSize = 20;
}
Criteria criteria=this.getCurrentSession().createCriteria(t);
criteria.add(criterion);
criteria.addOrder(order);
criteria.setMaxResults(lineSize);
criteria.setFirstResult((currentPage-1)*lineSize);
List<T>list=criteria.list();
return list;
}
@SuppressWarnings("unchecked")
@Override
public T findOneByCriteria(Class<T> t, Criterion criterion) {
List<T> list=this.getCurrentSession().createCriteria(t).add(criterion).list();
if(list!=null&&list.size()>0){
return list.get(0);
}
return null;
}
@SuppressWarnings("unchecked")
@Override
public List<T> findByCriteria(Class<T> t, Criterion criterion) {
return this.getCurrentSession().createCriteria(t)
.add(criterion).list();
}
@Override
public Long count(Class<T> t) {
Criteria criteria=this.getCurrentSession().createCriteria(t);
return (long) criteria.list().size();
}
@SuppressWarnings("unchecked")
@Override
public List<T> findByCriteriaByPage(Class<T> t, Order order,
int currentPage, int lineSize) {
if (currentPage < 1) {
currentPage = 1;
}
if (lineSize < 1) {
lineSize = 20;
}
Criteria criteria=this.getCurrentSession().createCriteria(t);
criteria.addOrder(order);
criteria.setMaxResults(lineSize);
criteria.setFirstResult((currentPage-1)*lineSize);
List<T>list=criteria.list();
return list;
}
}