休眠分页

问题描述

我知道通过Hibernate中Criteria的setMaxResults和setFristResults方法可以分页..但我的问题是我如何将其与DAO分开,我的意思是我仅在实现DAO的地方才能指定setMaxResults()和setFristResults( )值,我想将其作为一个单独的层,因为如果假设大约有500个DAO的各种模块,则其难于相应地更改, 这是代码: 域:
public class Demo implements java.io.Serializable {
private int id;
private Date date;
private String weekday;
private Double cost;

public Demo() 
{

}

public Demo(Date date,String weekday,Double cost) 
{
    this.date = date;
    this.weekday = weekday;
    this.cost = cost;
}
/***Setter & getter***/
}
道:
public interface DemoDAO {

public void setPage(Page page);
public List<Demo> findAll();
}


public class DemoDAOImpl implements DemoDAO  {
private HibernateDAO hibernateDAO;
private Session session;
private Page page;

public DemoDAOImpl()
{
    hibernateDAO = new HibernateDAOImpl();
    session = hibernateDAO.getSession();
}

public void setPage(Page page) 
{
    this.page = page;
}

public List<Demo> findAll() 
{
    session.beginTransaction();
    Criteria criteria = session.createCriteria(Demo.class);
    criteria.setFirstResult(page.getPageNumber() * page.getPageSize());
    criteria.setMaxResults(page.getPageSize());

    List<Demo> demoList = criteria.list();
    session.getTransaction().commit();

    return demoList;
}
服务内容
public interface DemoService {

public List<Demo> showDetails(Page page);
}



public class DemoServiceImpl implements DemoService {
private DemoDAO demoDAO;

public DemoServiceImpl()
{
    demoDAO = new DemoDAOImpl();
}

public List<Demo> showDetails(Page page) 
{
    if(page != null)
        demoDAO.setPage(page);
    else
        page = new Page(0,50);

    return demoDAO.findAll();
}
}
现在从前端我称这个showDetails ... 如果我使用的是正确的东西,请纠正我...     

解决方法

因此,您使DAO处于有状态,这不是很好。 您可以将
Page
作为参数传递给每个方法。因此,“ 4”的一个实例就足够了。