dao层
1.先查询所有的记录数量(select count(*) from)
2.再查询每页的数据(select * from 表 limit ?,? )
public class CustomerAction extends ActionSupport implements ModelDriven<Customer> {
private static final long serialVersionUID = 3744982332278861955L;
@Autowired
private CustomerService customerService;
private Customer customer = new Customer();
public Customer getModel() {
return customer;
}
public String add() {
System.out.println("web层:保存客户...");
customerService.save(customer);
return NONE;
}
// 属性驱动的方式
// 当前页,默认值1
private Integer pageCode = 1;
public void setPageCode(Integer pageCode) {
if (pageCode == null) {
pageCode = 1;
}
this.pageCode = pageCode;
}
// 每页显示的数据的条数
private Integer pageSize = 2;
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public String findByPage() {
DetachedCriteria criteria = DetachedCriteria.forClass(Customer.class);
PageBean<Customer> page = customerService.findByPage(pageCode, pageSize, criteria);
return NONE;
}
}
@Transactional
@Service
public class CustomerServiceImpl implements CustomerService {
@Autowired
private CustomerDao customerDao;
public void setCustomerDao(CustomerDao customerDao) {
this.customerDao = customerDao;
}
@Override
public void save(Customer customer) {
System.out.println("业务层:保存客户...");
customerDao.save(customer);
}
@Override
public PageBean<Customer> findByPage(Integer pageCode, Integer pageSize, DetachedCriteria criteria) {
return customerDao.findByPage(pageCode, pageSize, criteria);
}
}
public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao {
@Override
public void save(Customer customer) {
System.out.println("持久层:save...");
this.getHibernateTemplate().save(customer);
}
@Override
public PageBean<Customer> findByPage(Integer pageCode, Integer pageSize, DetachedCriteria criteria) {
PageBean<Customer> page = new PageBean<>();
page.setPageCode(pageCode);
page.setPageSize(pageSize);
// 先查询总记录数
criteria.setProjection(Projections.rowCount());
List<Number> list = (List<Number>) this.getHibernateTemplate().findByCriteria(criteria);
if (list != null && list.size() > 0) {
int totalCount = list.get(0).intValue();
// 总的记录数
page.setTotalCount(totalCount);
}
// 强调:把select count(*)先清空。变成select * ...
criteria.setProjection(null);
List<Customer> beanList = (List<Customer>) this.getHibernateTemplate().findByCriteria(criteria,
(pageCode - 1) * pageSize, pageSize);
// 分页查询数据,每页显示的数据,使用limit
page.setBeanList(beanList);
return page;
}
}