实现分页功能

实现分页查询功能
建立PageBean实体类,用于记录页面信息
通过构造方法public PageBean(Integer currentPage, Integer totalCount, Integer pageSize)传入当前页面数,总记录数,总页数。

package cn.lzm.util;

import java.util.List;

public class PageBean {
	//当前页数
	private Integer currentPage;
	//总记录数
	private Integer totalCount;
	//页面记录数
	private Integer pageSize;
//	总页数
	private Integer totalPage;
	//返回查询对象
	private List list;
	public PageBean(Integer currentPage, Integer totalCount, Integer pageSize) {
		this.totalCount = totalCount;
		this.pageSize=pageSize;
		this.currentPage=currentPage;
		
		//Integer返回null;
		if(this.currentPage==null)
		{
			this.currentPage=1;
		}
		if(this.pageSize==null)
		{
			//若每页条数没有指定,默认3条
		this.pageSize = 3;
		}
	
		//计算总页数
        this.totalPage=(this.totalCount+this.pageSize-1)/this.pageSize;
        
        //不能小于1
        if(this.currentPage<1)
        {
        	this.currentPage=1;
        }
        //判断当前页数是否超出范围
        if(this.currentPage>this.totalPage)
        {
        	this.currentPage=totalPage;
        }
	}
	
	//计算起始索引
	public int getStart()
	{
		return (this.currentPage-1)*this.pageSize;
	}
	public Integer getCurrentPage() {
		return currentPage;
	}
	public void setCurrentPage(Integer currentPage) {
		this.currentPage = currentPage;
	}
	public Integer getTotalCount() {
		return totalCount;
	}
	public void setTotalCount(Integer totalCount) {
		this.totalCount = totalCount;
	}
	public Integer getPageSize() {
		return pageSize;
	}
	public void setPageSize(Integer pageSize) {
		this.pageSize = pageSize;
	}
	public Integer getTotalPage() {
		return totalPage;
	}
	public void setTotalPage(Integer totalPage) {
		this.totalPage = totalPage;
	}
	public List getList() {
		return list;
	}
	public void setList(List list) {
		this.list = list;
	}
	
}

CustomerAction中方法
DetachedCriteria翻译为离线查询,他是可以脱离session条件查询的对象,
大家都知道Criteria查询需要通过session才能查询,而DetachedCriteria离线查询
可以在其他层进行封装,这个比较有用的,在ssh整合的时候,在做一些特别复杂的查询的时候
我们可以直接在WEB层进行封装,然后再传递给Dao层,这样就会省去很多麻烦,不用在WEB获取很多数据,
然后传送给service层,再传给Dao层了

package cn.lzm.web.action;

import org.apache.commons.lang3.StringUtils;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
import org.hibernate.type.IntegerType;
import org.junit.Test;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

import cn.lzm.domain.Customer;
import cn.lzm.domain.User;
import cn.lzm.service.CustomerService;
import cn.lzm.service.UserService;
import cn.lzm.util.PageBean;


public class CustomerAction extends ActionSupport implements ModelDriven<Customer> {
	//微不足道,不用spring
	private Customer customer= new Customer();
	private CustomerService customerservice;
	
	public void setCustomerservice(CustomerService customerservice) {
		this.customerservice = customerservice;
	}

	private Integer currentPage;
	private Integer pageSize;

	public Integer getCurrentPage() {
		return currentPage;
	}

	public void setCurrentPage(Integer currentPage) {
		this.currentPage = currentPage;
	}
	public Integer getPageSize() {
		return pageSize;
	}

	public void setPageSize(Integer pageSize) {
		this.pageSize = pageSize;
	}



	@Override
	public Customer getModel() {
		// TODO Auto-generated method stub

		return customer;
	}

	public String list() throws Exception {
		
		//封装离线查询对象
		DetachedCriteria dCriteria=DetachedCriteria.forClass(Customer.class);
		//判断并封装参数
		if(StringUtils.isNoneBlank(customer.getCust_name()))
		{
			dCriteria.add(Restrictions.like("cust_name", "%"+customer.getCust_name()+"%"));
		}
		//1 调用Service查询分页数据(PageBean)
		PageBean pb =customerservice.getPageBean(dCriteria,currentPage,pageSize);
		//2 将PageBean放入request域,转发到列表页面显示
		ActionContext.getContext().put("pageBean", pb);
		return "list";
	}
}

CustomerServiceImplement

package cn.lzm.service.Implement;

import java.util.List;

import org.hibernate.criterion.DetachedCriteria;


import cn.lzm.dao.CustomerDao;
import cn.lzm.domain.Customer;
import cn.lzm.service.CustomerService;
import cn.lzm.util.PageBean;

public class CustomerServiceImplement implements CustomerService {

	private CustomerDao customerdao;
	public void setCustomerdao(CustomerDao customerdao) {
		this.customerdao = customerdao;
	}

	@Override
	public void list() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public PageBean getPageBean(DetachedCriteria detachedCriteria, Integer currentPage, Integer pageSize) {
		// TODO Auto-generated method stub
//		1.调用dao查询总记录数
		Integer totalCount=customerdao.geTotalCount(detachedCriteria);
//		2.创建PageBean对象
				PageBean pBean=new PageBean(currentPage, totalCount, pageSize);
		//3.调用dao查询分页列表数据
		List<Customer> list=customerdao.getPageList(detachedCriteria,pBean.getStart(),pBean.getPageSize());
//		4.放入pageBean中,并返回
		pBean.setList(list);
		return pBean;
	}

}

CustomerDaoImplement

package cn.lzm.dao.Implement;

import java.util.List;

import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Projection;
import org.hibernate.criterion.Projections;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;

import cn.lzm.dao.CustomerDao;
import cn.lzm.domain.Customer;

public class CustomerDaoImplement extends HibernateDaoSupport implements CustomerDao {

	@Override
	public Integer geTotalCount(DetachedCriteria detachedCriteria) {
		// TODO Auto-generated method stub
		detachedCriteria.setProjection(Projections.rowCount());
		
		List<Long> list = (List<Long>) getHibernateTemplate().findByCriteria(detachedCriteria);
		
		//清空聚合函数
		detachedCriteria.setProjection(null);
		if(list!=null&& list.size()>0) {
			Long count = list.get(0);
			return count.intValue();
		}else {
			return null;
		}
	
		
	}

	@Override
	public List<Customer> getPageList(DetachedCriteria detachedCriteria, int start, Integer pageSize) {
		// TODO Auto-generated method stub
		List<Customer> list = (List<Customer>) getHibernateTemplate().findByCriteria(detachedCriteria, start, pageSize);
		return list;
	}

}

hibernate Criteria setProjection
https://blog.csdn.net/u010485319/article/details/23202389

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot提供了很多简单易用的工具来实现分页功能。下面我简单介绍一下如何在Spring Boot中实现分页功能: 1. 添加依赖:在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency> ``` 2. 配置分页插件:在application.properties文件中添加以下配置: ``` pagehelper.helperDialect=mysql pagehelper.reasonable=true pagehelper.supportMethodsArguments=true pagehelper.params=count=countSql ``` 其中,helperDialect指定数据库方言,reasonable表示是否合理化分页参数,supportMethodsArguments表示支持通过方法参数来传递分页参数,params用于指定count和countSql的参数名。 3. 定义分页查询接口:在Repository中定义分页查询接口,例如: ```java @Repository public interface UserRepository extends JpaRepository<User, Long> { @Select("SELECT * FROM user") List<User> findAll(); @Select("SELECT * FROM user WHERE name = #{name}") List<User> findByName(@Param("name") String name); @Select("SELECT * FROM user WHERE email = #{email}") List<User> findByEmail(@Param("email") String email); @Select("SELECT * FROM user WHERE name = #{name} AND email = #{email}") List<User> findByNameAndEmail(@Param("name") String name, @Param("email") String email); // 分页查询所有用户 @Select("SELECT * FROM user") Page<User> findAllUsers(Pageable pageable); } ``` 其中,Pageable是Spring提供的一个接口,表示分页参数,包括当前页码、每页数量、排序等信息,Page分页结果类型。 4. 调用分页查询接口:在Service层调用分页查询接口,例如: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserRepository userRepository; @Override public PageInfo<User> findAllUsers(int pageNum, int pageSize) { PageHelper.startPage(pageNum, pageSize); List<User> users = userRepository.findAll(); PageInfo<User> pageInfo = new PageInfo<>(users); return pageInfo; } } ``` 其中,PageHelper是分页插件提供的工具类,startPage方法用于开启分页查询,并传入分页参数,findAll方法返回分页后的结果,PageInfo是PageHelper提供的分页信息类,包括总记录数、总页数、当前页码等信息。 以上就是在Spring Boot中实现分页功能的简单步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值