package dao.impl;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.hibernate.criterion.DetachedCriteria;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.HibernateTemplate;
import dao.BaseDao;
public class BaseDaoImpl<T> implements BaseDao<T> {
private HibernateTemplate hibernateTemplate;
private Class<T> cls;
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
public BaseDaoImpl() {
cls = (Class<T>) ((ParameterizedType) this.getClass()
.getGenericSuperclass())
.getActualTypeArguments()[0];
}
@Override
public void save(T o) {
this.getHibernateTemplate().save(o);
}
@Override
public void update(T o) {
this.getHibernateTemplate().update(o);
}
@Override
public void delete(T o) {
this.getHibernateTemplate().delete(o);
}
@Override
public T get(Serializable id) {
return this.getHibernateTemplate().get(cls, id);
}
@Override
public void saveOrUpdate(T o) {
this.getHibernateTemplate().saveOrUpdate(o);
}
@Override
public T merge(T o) {
return this.getHibernateTemplate().merge(o);
}
@Override
public Integer deleteAll(final Object[] ids) {
// delete from Xxx where id in(:ids)
// Query executeUpdate() int
return this.getHibernateTemplate().execute(
new HibernateCallback<Integer>() {
public Integer doInHibernate(org.hibernate.Session arg0)
throws org.hibernate.HibernateException ,java.sql.SQLException {
return arg0.createQuery(
"delete from " + cls.getSimpleName()
+ " x where x.id in(:ids)")
.setParameterList("ids", ids)
.executeUpdate();
}
}
);
}
@Override
public void deleteAll(Collection<T> objs) {
this.getHibernateTemplate().deleteAll(objs);
}
@Override
public List<T> findAll() {
return this.getHibernateTemplate()
.find("from " + cls.getSimpleName());
}
@Override
public List<T> findForPage(DetachedCriteria conds, int pageNo, int pageSize) {
return this.getHibernateTemplate()
.findByCriteria(conds, (pageNo - 1) * pageSize, pageSize);
}
@Override
public Integer getTotalCount(DetachedCriteria conds) {
return (Integer) this.getHibernateTemplate()
.findByCriteria(conds).get(0);
}
@Override
public List<T> findByCriteria(DetachedCriteria conds) {
return this.getHibernateTemplate().findByCriteria(conds);
}
@Override
public List<T> findByExample(T o) {
return this.getHibernateTemplate().findByExample(o);
}
@Override
public List<T> find(String hql, Object... params) {
return this.getHibernateTemplate().find(hql, params);
}
}
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.hibernate.criterion.DetachedCriteria;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.HibernateTemplate;
import dao.BaseDao;
public class BaseDaoImpl<T> implements BaseDao<T> {
private HibernateTemplate hibernateTemplate;
private Class<T> cls;
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
public BaseDaoImpl() {
cls = (Class<T>) ((ParameterizedType) this.getClass()
.getGenericSuperclass())
.getActualTypeArguments()[0];
}
@Override
public void save(T o) {
this.getHibernateTemplate().save(o);
}
@Override
public void update(T o) {
this.getHibernateTemplate().update(o);
}
@Override
public void delete(T o) {
this.getHibernateTemplate().delete(o);
}
@Override
public T get(Serializable id) {
return this.getHibernateTemplate().get(cls, id);
}
@Override
public void saveOrUpdate(T o) {
this.getHibernateTemplate().saveOrUpdate(o);
}
@Override
public T merge(T o) {
return this.getHibernateTemplate().merge(o);
}
@Override
public Integer deleteAll(final Object[] ids) {
// delete from Xxx where id in(:ids)
// Query executeUpdate() int
return this.getHibernateTemplate().execute(
new HibernateCallback<Integer>() {
public Integer doInHibernate(org.hibernate.Session arg0)
throws org.hibernate.HibernateException ,java.sql.SQLException {
return arg0.createQuery(
"delete from " + cls.getSimpleName()
+ " x where x.id in(:ids)")
.setParameterList("ids", ids)
.executeUpdate();
}
}
);
}
@Override
public void deleteAll(Collection<T> objs) {
this.getHibernateTemplate().deleteAll(objs);
}
@Override
public List<T> findAll() {
return this.getHibernateTemplate()
.find("from " + cls.getSimpleName());
}
@Override
public List<T> findForPage(DetachedCriteria conds, int pageNo, int pageSize) {
return this.getHibernateTemplate()
.findByCriteria(conds, (pageNo - 1) * pageSize, pageSize);
}
@Override
public Integer getTotalCount(DetachedCriteria conds) {
return (Integer) this.getHibernateTemplate()
.findByCriteria(conds).get(0);
}
@Override
public List<T> findByCriteria(DetachedCriteria conds) {
return this.getHibernateTemplate().findByCriteria(conds);
}
@Override
public List<T> findByExample(T o) {
return this.getHibernateTemplate().findByExample(o);
}
@Override
public List<T> find(String hql, Object... params) {
return this.getHibernateTemplate().find(hql, params);
}
}