package web.service; import db.annotation.Model; import db.config.HibernateConfig; import db.model.AbstractModel; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Projections; import org.springframework.dao.DataAccessException; import org.springframework.orm.hibernate5.HibernateTemplate; import org.springframework.util.ClassUtils; import java.io.Serializable; import java.util.List; /** * Created by reborn on 2017/7/28. */ public abstract class BaseService{ protected static Logger log=LogManager.getLogger(); protected HibernateTemplate hibernateTemplate; public final HibernateTemplate getHibernateTemplate() { if(hibernateTemplate==null) { hibernateTemplate=HibernateConfig.get(ClassUtils.getUserClass(this.getClass()).getAnnotation(Model.class).value()); } return hibernateTemplate; } public final Serializable save(T command) throws DataAccessException { return getHibernateTemplate().save(command); } public final void update(T command) throws DataAccessException{ getHibernateTemplate().update(command); } public final T get(T command) throws DataAccessException{ T model=(T)getHibernateTemplate().get(command.getClass(),command.primaryKey()); if(model!=null){ return model.cast(); }else{ return null; } } public final void delete(T command) throws DataAccessException{ getHibernateTemplate().delete(get(command)); } public final List find(DetachedCriteria criteria, int firstResult,int maxResults) throws DataAccessException{ return getHibernateTemplate().findByCriteria(criteria,firstResult,maxResults (Long) criteria.setProjection(Projections.rowCount()).getExecutableCriteria(session).uniqueResult()); } }