1. 程式人生 > 實用技巧 >MyBatis分頁外掛PageHelper簡單使用

MyBatis分頁外掛PageHelper簡單使用

一、匯入依賴

 <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.2</version>
        </dependency>

二、整合ssm框架

在sqlSessionFactoryBean內加入配置即可

 <!-- 把交給IOC管理 SqlSessionFactory 
--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="plugins"> <array> <bean class="com.github.pagehelper.PageInterceptor"> <
property name="properties"> <props> <prop key="helpDialect">oracle</prop> <prop key="reasonable">true</prop> </props> </property> </
bean> </array> </property> </bean>

三、coding部分

在controller層傳入引數(page:當前頁碼,pageSize:每頁顯示的條數)

controller層

@Controller
@RequestMapping("/orders")
public class OrdersController {
    @Autowired
    private IOrdersService ordersService;
  
    @RequestMapping("/findAll.do")
    public ModelAndView findAll(@RequestParam(name = "page", required = true, defaultValue =
            "1") Integer page, @RequestParam(name = "pageSize", required = true, defaultValue = "4")
                                        Integer pageSize) throws Exception {
        List<Orders> ordersList = ordersService.findAll(page,pageSize);
        PageInfo pageInfo = new PageInfo(ordersList);
        ModelAndView mv = new ModelAndView();
        mv.setViewName("orders-list");
        mv.addObject("pageInfo", pageInfo);
        return mv;
    }
}

service層

PageHelper.startPage(page,pageSize);一定要在查詢方法前中間不能插入其他程式碼 ,否則攔截器無法將分頁語句注入。
@Service
public class IOrdersServiceImpl implements IOrdersService {

    @Autowired
    private IOrdersDao ordersDao;
    @Override
    public List<Orders> findAll(Integer page,Integer pageSize) throws Exception {
        PageHelper.startPage(page,pageSize);
        List<Orders> list = ordersDao.findAll();
        return list;

    }
}

四、前端頁面顯示

<div class="box-footer">
                    <div class="pull-left">
                        <div class="form-group form-inline">
                            總共${pageInfo.pages}頁,共${pageInfo.total} 條資料。 每頁
                            <select class="form-control" id="changePageSize" onchange="changePageSize()">
                                <option>1</option>
                                <option>2</option>
                                <option>3</option>
                                <option>4</option>
                                <option>5</option>
                            </select></div>
                    </div>

                    <div class="box-tools pull-right">
                        <ul class="pagination">
                            <li>
                                <a href="${pageContext.request.contextPath}/orders/findAll.do?page=1&pageSize=${pageInfo.pageSize}" aria-label="Previous">首頁</a>
                            </li>
                            <li><a href="${pageContext.request.contextPath}/orders/findAll.do?page=${pageInfo.pageNum-1}&pageSize=${pageInfo.pageSize}">上一頁</a></li>
                            <c:forEach begin="1" end="${pageInfo.pages}" var="pageNum">
                                <li><a href="${pageContext.request.contextPath}/orders/findAll.do?page=${pageNum}&pageSize=${pageInfo.pageSize}">${pageNum}</a></li>
                            </c:forEach>
                            <li><a href="${pageContext.request.contextPath}/orders/findAll.do?page=${pageInfo.pageNum+1}&pageSize=${pageInfo.pageSize}">下一頁</a></li>
                            <li>
                                <a href="${pageContext.request.contextPath}/orders/findAll.do?page=${pageInfo.pages}&pageSize=${pageInfo.pageSize}" aria-label="Next">尾頁</a>
                            </li>
                        </ul>
                    </div>

                </div>

注:

PageInfo類相當於一個分頁Bean

該類中的相關屬性:

list:表示分頁後每頁顯示的資料

pages:表示總頁數

pageSize:表示當前頁顯示的條數

total:表示總條數

pageNum:表示當前頁(當前頁頁碼)