mybaits 分页插件 pageHelper5.0.2

本文由黑壳网原创
本文来源mybaits 分页插件 pageHelper5.0.2~黑壳网

壳叔搞笑一刻

一个老帽儿从未乘过电梯。
这天,他来到一家饭店,站在电梯门口看见一位老太太进了电梯,过了一会儿,电梯门又打开了,出来了一位年轻漂亮的姑娘,他惊喜过望地想:“哇,要是把我老婆带来就好了。”
d1ecbed9e4c046c2b4f204dd8b6af33e-273a5f9944b13e6cced9f2241eefe42c.jpg

如果你在找Mybatis的分页插件,那么PageHelper一定会是你的首选。这一定会是使用最方便的分页插件。这个插件它支持任何复杂的单表,多表分页。

今天会详细介绍 pageHelper的5.0的使用

目前该插件,支持的数据库有

  1. Oracle

  2.  Mysql

  3. MariaDB

  4. SQLite

  5.  Hsqldb

  6. PostgreSQL

  7. DB2

  8. SqlServer(2005,2008)

  9. Informix

  10. H2

  11. SqlServer2012

  12. Derby

使用 PageHelper 你只需要在 classpath 中包含 pagehelper-x.x.x.jar 和 jsqlparser-0.9.5.jar

如果你使用 Maven,你只需要在 pom.xml 中添加下面的依赖:

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

与分页插件 PageHelper 5.0.0 同时发布的还有 pagehelper-spring-boot-starter。

如果你使用 Spring Boot,你只需要在 pom.xml 中添加下面的依赖:

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.0.0</version>
</dependency>

有关 pagehelper-spring-boot-starter 的用法可以参考集成示例 MyBatis-Spring-Boot

接着,在spring-mybatis.xml中是这样配置:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 数据库连接池 -->
        <property name="dataSource" ref="dataSource" />
        <!-- 加载mybatis的全局配置文件 -->
        <property name="mapperLocations">
            <array>
                <value>classpath:mapping/*.xml</value>
            </array>
        </property>
        <!-- <property name="configLocation" value="classpath:sqlMapConfig.xml" /> -->
        <property name="plugins">
            <array>
                <bean class="com.github.pagehelper.PageInterceptor">
                    <property name="properties">
                        <value>
                            helperDialect=mysql
                        </value>
                    </property>
                </bean>
            </array>
        </property>
    </bean>

配置结束后,进入正题,创建一个查询语句,用了pageHelper 查询语句与之前的一样。

    select
    <include refid="product"></include>
    from product
    where 1 = 1

查询一个product 的表

    /**
     * 产品管理界面
     *
     * @param request
     * @param model
     * @return
     */
    @RequestMapping(value = "productManage")
    private String productManage(HttpServletRequest request, Model model, ProductDetail productDetail,
                                 @RequestParam(required = true, defaultValue = "1") Integer page,
                                 @RequestParam(required = false, defaultValue = "10") Integer pageSize) {

        PageHelper.startPage(page, pageSize);
        List<ProductDetail> productDetails = productService.getProductManage(productDetail);

        PageInfo<ProductDetail> p = new PageInfo<ProductDetail>(productDetails);

        /**
         * 返回产品查询信息
         */
        model.addAttribute("productDetail", productDetail);
        /**
         * 返回产品信息集合
         */
        model.addAttribute("productDetails", productDetails);
        /**
         * 分页配置信息返回
         */
        model.addAttribute("page", p);
        return "manage/product/productManage";
    }

可以看到,方法里有两个参数,前面也说了,这是一个demo,仅仅只是一个非常简单的分页效果。
PageHelper.startPage(page, pageSize);
这段代码表示,程序开始分页了,page默认值是1,pageSize默认是10,意思是从第1页开始,每页显示10条记录。
PageInfo这个类是插件里的类,这个类里面的属性还是值得看一看:

    //当前页
    private int pageNum;
    //每页的数量
    private int pageSize;
    //当前页的数量
    private int size;

    //由于startRow和endRow不常用,这里说个具体的用法
    //可以在页面中"显示startRow到endRow 共size条数据"

    //当前页面第一个元素在数据库中的行号
    private int startRow;
    //当前页面最后一个元素在数据库中的行号
    private int endRow;
    //总记录数
    private long total;
    //总页数
    private int pages;
    //结果集
    private List<T> list;

    //前一页
    private int prePage;
    //下一页
    private int nextPage;

    //是否为第一页
    private boolean isFirstPage = false;
    //是否为最后一页
    private boolean isLastPage = false;
    //是否有前一页
    private boolean hasPreviousPage = false;
    //是否有下一页
    private boolean hasNextPage = false;
    //导航页码数
    private int navigatePages;
    //所有导航页号
    private int[] navigatepageNums;
    //导航条上的第一页
    private int navigateFirstPage;
    //导航条上的最后一页
    private int navigateLastPage;

PageInfo p=new PageInfo(list);
然后mv.addObject(“page”, p);
这样在页面中就可以通过 page.nextPage, {page.prePage}翻到上一页,

ok是不是简单了许多,热爱编程,学习不停止!

黑壳网 www.bhusk.com

E-mail:keshu@bhusk.com

本文由 黑壳网的壳叔 创作,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。

可自由转载、引用,但需署名作者且注明文章

MyBatis提供了很方便的分页功能。下面是基于MyBatis分页实现步骤: 1. 在Mapper.xml文件中,编写查询SQL语句,使用limit关键字实现分页功能。 ```xml <!--查询语句--> <select id="selectUserList" parameterType="map" resultMap="userMap"> select * from user <where> <if test="username != null and username != ''"> and username like CONCAT('%', #{username}, '%') </if> </where> order by create_time desc limit #{start}, #{pageSize} </select> ``` 2. 在Java代码中,构建分页参数对象PageInfo,传入Mapper接口方法中。 ```java public class PageInfo { private Integer pageNo; private Integer pageSize; private Integer start; // getter/setter 省略 } ``` 3. 在Mapper接口中,定义查询方法,传入PageInfo对象作为参数。 ```java public interface UserMapper { List<User> selectUserList(PageInfo pageInfo); } ``` 4. 在Service层中,处理分页逻辑。 ```java public class UserService { public PageInfo queryUserList(Integer pageNo, Integer pageSize, String username) { // 计算start Integer start = (pageNo - 1) * pageSize; // 构建分页参数对象 PageInfo pageInfo = new PageInfo(); pageInfo.setPageNo(pageNo); pageInfo.setPageSize(pageSize); pageInfo.setStart(start); // 调用Mapper接口方法 List<User> userList = userMapper.selectUserList(pageInfo); // 计算总记录数 Integer totalCount = userMapper.selectUserCount(username); // 构建PageInfo对象 PageInfo result = new PageInfo(); result.setPageNo(pageNo); result.setPageSize(pageSize); result.setTotalCount(totalCount); result.setDataList(userList); return result; } } ``` 5. 前端展示分页数据。 在页面上展示分页数据,可以使用任何一种前端框架实现,例如Bootstrap、layui等。具体实现步骤可以参考前端框架的官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值