import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import org.apache.log4j.Logger;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
/**
* for now, our PK is only Integer type
*
*
* **/
public abstract class BaseDao<T> extends HibernateDaoSupport {
private final static Logger logger = Logger.getLogger( BaseDao.class );
private final static String FIND_BY_PKS = "FROM %1$s WHERE %2$s in (:pks)";
private final static String FIND_BY_PROPERTY = "FROM %1$s WHERE %2$s = ?";
private Class<T> entityClass;
private String entityName;
private String pkName;
public abstract String getPkName();
@SuppressWarnings( "unchecked" )
public BaseDao() {
entityClass = null;
Type t = getClass().getGenericSuperclass();
if ( t instanceof ParameterizedType ) {
Type[] p = ( (ParameterizedType) t ).getActualTypeArguments();
entityClass = (Class<T>) p[0];
} else {
entityClass = (Class<T>) Object.class;
}
entityName = entityClass.getSimpleName();
pkName = getPkName();
}
public Class<T> getEntityClass(){
return entityClass;
}
public T get(Integer id){
return (T) getHibernateTemplate().get( entityClass, id );
}
public T save(T entity){
getHibernateTemplate().save( entity );
return entity;
}
public T saveOrUpdate(T entity){
this.getHibernateTemplate().saveOrUpdate( entity );
return entity;
}
public void delete(T entity){
getHibernateTemplate().delete( entity );
}
public void loadAll(){
getHibernateTemplate().loadAll( entityClass );
}
public void deleteAll(List<T> entities){
getHibernateTemplate().deleteAll( entities );
}
@SuppressWarnings( "unchecked" )
public List<T> findbyPKs(List<Integer> pks){
String hql = String.format( FIND_BY_PKS, entityName, pkName );
logger.debug( "HQL > " + hql );
Session session = getSession();
Query query = session.createQuery( hql );
query.setParameterList( "pks", pks );
return (List<T>) query.list();
}
@SuppressWarnings( "unchecked" )
public List<T> findByProperty(String property,Object value){
String hql = String.format( FIND_BY_PROPERTY, entityName, property );
logger.debug( "HQL > " + hql );
return (List<T>) getHibernateTemplate().find( hql, value );
}
}
使用((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]的实例
最新推荐文章于 2024-07-10 21:32:30 发布