package com.tarena.dao.impl;
import java.sql.SQLException;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.HibernateTemplate;
import com.tarena.dao.IEmpDao;
import com.tarena.po.Emp;
public class EmpDaoImpl implements IEmpDao {
private HibernateTemplate hibernateTemplate;
// 注入SessionFactory
public void setSessionFactory(SessionFactory sessionFactory){
hibernateTemplate = new HibernateTemplate(sessionFactory);
}
// 根据empno删除emp数据
public void deleteById(int empno) {
Emp emp = new Emp();
emp.setEmpno(7934);
hibernateTemplate.delete(emp);
}
public long findCount() {
String hql = "select count(empno) from Emp";
return (Long) hibernateTemplate.find(hql).get(0);
}
// 根据id查询对象
public Emp findEmpById(int empno) {
return (Emp) hibernateTemplate.get(Emp.class, empno);
}
public List<Emp> findEmps() {
// 要求只查询出5个属性的,使用hql的构造方法查询
String hql = "select new com.tarena.po.Emp(empno,ename,job,sal) from Emp ";
return hibernateTemplate.find(hql);
}
public List<Emp> findPage(final int firstResult, final int maxResult) {
// hibernate 对分页的支持很好,只能使用回调调用session
return (List<Emp>) hibernateTemplate.execute(new HibernateCallback(){
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
String hql = "from Emp";
return session.createQuery(hql)
.setFirstResult(firstResult)
.setMaxResults(maxResult)
.list();
}
});
}
}