package edu.sjtu.infosec.ismp.manager.LM.pfLog.dao.impl; import java.sql.Timestamp; import java.util.List; import org.hibernate.Criteria; import org.hibernate.criterion.Example; import org.hibernate.criterion.Expression; import org.hibernate.criterion.MatchMode; import org.hibernate.criterion.Order; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.infosec.ismp.manager.rmi.lm.pfLog.model.SystemLog; import org.springframework.stereotype.Component; import org.springside.modules.orm.hibernate.HibernateDao; import edu.sjtu.infosec.ismp.manager.SYSM.config.model.lm.dLog.SysLogSource; import edu.sjtu.infosec.ismp.security.Domain; /** * 平台日志操作DAO * * @author 林超 * */ @Component public class SystemLogDaoImpl extends HibernateDao<SystemLog, Long> { public List<SystemLog> getPageBySystemLog(SystemLog systemLog, Integer pageNo, Integer pageRowNum, Timestamp startDate, Timestamp endDate) { Criteria criteria = spliceCriteria(systemLog, pageNo, pageRowNum, startDate, endDate); return criteria.list(); } public Integer getSystemLogCount(SystemLog log, Timestamp startDate, Timestamp endDate) { Criteria criteria = spliceCriteria(log, null, null, startDate, endDate); criteria.setProjection(Projections.rowCount()); return (Integer) criteria.uniqueResult(); } /** * spliceCriteria decription : 带分页功能的多条件查询语句拼接 * * @param sysLogSource * @param pageNo * @param pageRowNum * @return */ private Criteria spliceCriteria(SystemLog log, Integer pageNo, Integer pageRowNum, Timestamp startDate, Timestamp endDate) { Criteria criteria = getSession().createCriteria(SystemLog.class); if (log != null) { // 产生范例对像 // if(log) Example example = Example.create(log); // 排除属性为null //example.excludeNone(); // 对String属性都用模糊匹配方式 example.enableLike(MatchMode.ANYWHERE); criteria.add(example); criteria.add(Restrictions.between("time", startDate, endDate)); criteria.addOrder(Order.desc("time")); if (log.getId() != null) { criteria.add(Expression.eq("id", log.getId())); } } // 添加分页查询条件:起始页 if (null != pageNo) { criteria.setFirstResult(pageNo.intValue()); } // 添加分页查询条件:每页需要显示的数目 if (null != pageRowNum) { criteria.setMaxResults(pageRowNum.intValue()); } return criteria; } }