com.yuweix.tripod.dao.hibernate.AbstractDao Maven / Gradle / Ivy
package com.yuweix.tripod.dao.hibernate;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.query.Query;
import javax.annotation.Resource;
import javax.persistence.criteria.CriteriaQuery;
/**
* @author yuwei
*/
public abstract class AbstractDao implements Dao {
private Class clz;
private SessionFactory sessionFactory;
@Resource
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
protected Session getSession() {
return sessionFactory.getCurrentSession();
}
@SuppressWarnings("unchecked")
public AbstractDao() {
this.clz = null;
Type t = getClass().getGenericSuperclass();
if (t instanceof ParameterizedType) {
this.clz = (Class) ((ParameterizedType) t).getActualTypeArguments()[0];
}
}
@Override
public List getAll() {
Session session = getSession();
CriteriaQuery criteriaQuery = session.getCriteriaBuilder().createQuery(clz);
Query query = session.createQuery(criteriaQuery);
return query.list();
}
@Override
public T get(final PK id) {
return (T) getSession().get(clz, id);
}
@Override
public void save(final T entity) {
getSession().save(entity);
}
@Override
public void saveOrUpdateAll(final Collection entities) {
getSession().saveOrUpdate(entities);
}
@Override
public void update(final T entity) {
getSession().update(entity);
}
@Override
public void saveOrUpdate(final T entity) {
getSession().saveOrUpdate(entity);
}
@Override
public T merge(final T entity) {
getSession().merge(entity);
return entity;
}
@Override
public void deleteByKey(PK id) {
final T entity = get(id);
if (entity != null) {
getSession().delete(entity);
}
}
/**
* 查询某个表的所有字段
* @param sql
* @param params
* @return
*/
@SuppressWarnings("unchecked")
protected List query(String sql, Map params) {
return (List) new MapCallback(sql, clz, params).doInHibernate(getSession());
}
/**
* 查询某个表的所有字段
* @param sql
* @return
*/
protected List query(String sql) {
return query(sql, (Object[]) null);
}
/**
* 查询某个表的所有字段
* @param sql
* @param params
* @return
*/
@SuppressWarnings("unchecked")
protected List query(String sql, Object[] params) {
return (List) new IndexCallback(sql, clz, params).doInHibernate(getSession());
}
/**
* 查询某个表的所有字段。分页查询
* @param sql
* @param pageNo
* @param pageSize
* @param params
* @return
*/
@SuppressWarnings("unchecked")
protected List query(String sql, int pageNo, int pageSize, Map params) {
return (List) new MapCallback(sql, clz, pageNo, pageSize, params).doInHibernate(getSession());
}
/**
* 查询某个表的所有字段。分页查询
* @param sql
* @param pageNo
* @param pageSize
* @return
*/
protected List query(String sql, int pageNo, int pageSize) {
return query(sql, pageNo, pageSize, (Object[]) null);
}
/**
* 查询某个表的所有字段。分页查询
* @param sql
* @param pageNo
* @param pageSize
* @param params
* @return
*/
@SuppressWarnings("unchecked")
protected List query(String sql, int pageNo, int pageSize, Object[] params) {
return (List) new IndexCallback(sql, clz, pageNo, pageSize, params).doInHibernate(getSession());
}
/**
* 查询记录的条数
* @param sql
* @param params
* @return
*/
protected int queryCount(String sql, Map params) {
return (Integer) new MapCntCallback(sql, params).doInHibernate(getSession());
}
/**
* 查询记录的条数
* @param sql
* @return
*/
protected int queryCount(String sql) {
return queryCount(sql, (Object[]) null);
}
/**
* 查询记录的条数
* @param sql
* @param params
* @return
*/
protected int queryCount(String sql, Object[] params) {
return (Integer) new IndexCntCallback(sql, params).doInHibernate(getSession());
}
/**
* 查询某个表的所有字段。只取单条记录
* @param sql
* @param params
* @return
*/
protected T queryForObject(String sql, Map params) {
List list = query(sql, params);
return list == null || list.size() <= 0 ? null : list.get(0);
}
@SuppressWarnings("unchecked")
protected List © 2015 - 2025 Weber Informatics LLC | Privacy Policy