在项目中使用PageHelper实现分页功能

1.1 项目中使用PageHelper

1.1.1 第一步:添加依赖

1.1.2 第二步:在applicationContext.xml中配置拦截器插件


  •    
           
           
           
               
                   
                       
                           
                                oracle
                                true
                           

                       

                   

               

           

       

  • 完整applicationContext.xml配置 


    
    
    
    

    
    
        
        
        
        
        
        
    
    
    
        
        
        
            
                
                    
                        
                            oracle
                            true
                        
                    
                
            
        
    
    
    
        
    
    
    
        
    
    
    
    
    




2. 订单分页

  • Oracle中创建订单表的SQL语句:-- 订单表
    CREATE TABLE orders(
        id int PRIMARY KEY,
        orderNum VARCHAR2(20) NOT NULL UNIQUE,
        orderTime date,
        peopleCount INT,
        orderDesc VARCHAR2(500),
        payType INT,
        orderStatus INT,
        productId int,
        FOREIGN KEY (productId) REFERENCES product(id)
    );
  • 实体类Order 

在项目中使用PageHelper实现分页功能_第1张图片

2.1 dao

使用PageHelper分页,dao只需要查询全部,不需要手动写分页SQL。

dao查询方法已经有了:

  • -- product与Orders一对一关系查询
    select o.id oid,o.ordernum,o.ordertime,o.peoplecount,o.orderdesc,
    o.paytype,o.orderstatus,o.productid,p.* from orders o inner join  product p  on o.productid=p.id;
/**
 * 使用PageHelper分页,dao只需要查询全部,不需要手动写SQL。
 */
public interface IOrderDao {
    /**
     * 查询全部
     */
    @Select("select o.id oid,o.ordernum,o.ordertime,o.peoplecount,o.orderdesc,o.paytype,o.orderstatus\n" +
            ",p.* from orders o inner join product p on o.productid=p.id")
    @Results({
            // 订单信息,只要指定id列与属性的映射关系,其他列会自动封装(属性与列一致)
            @Result(property = "id", column = "oid"),
            // 产品信息
            @Result(property = "product.id", column = "id"),
            @Result(property = "product.productNum", column = "productNum"),
            @Result(property = "product.productName", column = "productName"),
            @Result(property = "product.cityName", column = "cityName"),
            @Result(property = "product.departureTime", column = "departureTime"),
            @Result(property = "product.productPrice", column = "productPrice"),
            @Result(property = "product.productDesc", column = "productDesc"),
            @Result(property = "product.productStatus", column = "productStatus"),
    })
    List findAll();

}

 2.2 service接口、实现

2.2.1 service接口

public interface IOrderService {
    /**
     * 查询全部
     */
    List findAll();

    /**
     * 分页查询
     * @param pageNum  当然页
     * @param pageSize 页大小
     * @return 返回PageHelper提供的封装分页参数的PageInfo对象
     */
    PageInfo findByPage(int pageNum, int pageSize);
}

2.2.2 service实现

@Service
@Transactional
public class OrderServiceImpl implements IOrderService {

    // 注入dao
    @Autowired
    private IOrderDao orderDao;

    @Override
    public List findAll() {
        return orderDao.findAll();
    }

    @Override
    public PageInfo findByPage(int pageNum, int pageSize) {
        // 分页查询(紧跟在其后的第一条查询sql将会被分页)
        PageHelper.startPage(pageNum,pageSize);
        // 查询全部
        List list = orderDao.findAll();
        // 返回结果
        PageInfo pageInfo = new PageInfo<>(list);
        return pageInfo;
    }
}

2.3 Controller

@Controller
@RequestMapping("/order")
public class OrderController {
    // 注入service
	@Autowired
	private IOrderService orderService;

    /**
     * 1.查询全部
     */
    @RequestMapping("/findAll")
    public ModelAndView findAll() {
        //1.1 调用service
        List list = orderService.findAll();
        //1.2 返回结果
        ModelAndView mv = new ModelAndView();
        mv.setViewName("order-list");
        mv.addObject("list", list);
        return mv;
    }

    @RequestMapping("/findByPage")
    public ModelAndView findByPage(
            @RequestParam(defaultValue = "1") int pageNum,
            @RequestParam(defaultValue = "2") int pageSize) {
        //1.1 调用service
        PageInfo pageInfo = orderService.findByPage(pageNum, pageSize);
        //1.2 返回结果
        ModelAndView mv = new ModelAndView();
        mv.setViewName("order-list");
        mv.addObject("pageInfo", pageInfo);
        return mv;
    }
}

2.4 简单测试

  •  

    --- (1)批量插入Order表数据脚本
    declare
    i integer;
    begin
    i := 1;
    loop
      INSERT INTO orders VALUES(i,'O9'||i,
      to_date('2018-09-09 20:10','yyyy-MM-dd HH24:mi'),3,'无',1,1,1);
    /* 参数递增 */
    i := i + 1;
    /* 停止条件 */
    exit when i > 50;
    end loop;
    commit;
    end;

    -- 查看
    select * from orders;

 

2.5 order-list.jsp

2.4.1 分页达到的效果

页面效果:只显示当前页前后5页的页码。最多显示的页码共11个。

2.6 分页设计

  1. 因为每一个模块的列表都要求有分页,所以把分页的公共代码抽取出去放到page.jsp
  2. 其它模块如果要分页,直接引入page.jsp页面即可。

在项目中使用PageHelper实现分页功能_第2张图片 

 

2.7 page.jsp

 分页条公用页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>



2.8 order-list.jsp页面

如果页面要分页,只需要引入下面代码即可:

在项目中使用PageHelper实现分页功能_第3张图片

2.9 测试

 在项目中使用PageHelper实现分页功能_第4张图片

你可能感兴趣的:(项目常见功能收录(一))