在这些控件里要达到分页的效果,一般都会传2个参数,第一个是表示当前页的索 引(一般从0开始),第二个表示当前页展示多少条业务记录,然后将相应的参数传递给List getList(PagenateArgs args)方法,最终实现数据库中的分页时候可以使用limit关键词(针对mysql)进行分页,如果是oracle或者sql server他们都有自带的rownum函数可以使用。

针对上述思路,首先在 demo.mybatis.model下面新建一个名为PagenateArgs的分页参数实体类与一个名为SortDirectionEnum的枚举 类,里面包含当前页面索引pageIndex, 当前页展示业务记录数pageSize, pageStart属性表示从第几条开始,(pageStart=pageIndex*pageSize)因为limit关键词用法是表示【limit 起始条数(不包含),取几条】,orderFieldStr排序字段,orderDirectionStr 排序方向,所以具体创建如下:

package david.mybatis.model;/* * 分页参数实体类 */public class PagenateArgs {    private int pageIndex;    private int pageSize;    private int pageStart;    private String orderFieldStr;    private String orderDirectionStr;    public PagenateArgs() {        // TODO Auto-generated constructor stub    }    public PagenateArgs(int pageIndex, int pageSize, String orderFieldStr, String orderDirectionStr) {        this.pageIndex = pageIndex;        this.pageSize = pageSize;        this.orderFieldStr = orderFieldStr;        this.orderDirectionStr = orderDirectionStr;        pageStart = pageIndex * pageSize;    }    public int getPageIndex() {        return pageIndex;    }    public int getPageStart() {        return pageStart;    }    public int getPageSize() {        return pageSize;    }    public String orderFieldStr() {        return orderFieldStr;    }    public String getOrderDirectionStr() {        return orderDirectionStr;    }}

package david.mybatis.model;/* * 排序枚举 */public enum SortDirectionEnum {    /*     * 升序     */    ASC,        /*     * 降序     */    DESC}

完成上面的步骤以后在IVisitorOperation接口类中继续添加一个方法public List getListByPagenate(PagenateArgs args),这次的分页其实也就是在这个的基础上稍加改动即可,IVisitorOperation接口类 改动后如下所示:

package david.mybatis.demo;import java.util.List;import david.mybatis.model.PagenateArgs;import david.mybatis.model.Visitor;import david.mybatis.model.VisitorWithRn;public interface IVisitorOperation {    /*     * 基础查询     */    public Visitor basicQuery(int id);    /*     * 添加访问者     */    public int add(Visitor visitor);        /*     * 删除访问者     */    public int delete(int id);        /*     * 更新访问者     */    public int update(Visitor visitor);        /*     * 查询访问者     */    public Visitor query(int id);        /*     * 查询List     */    public List getList();        /*     * 分页查询List     */    public List getListByPagenate(PagenateArgs args);    }

接下来改动VisitorMapper.xml配置文件了,新增一个节点id与参数类型参照前几章的方式配置好,如下此处新增的id就为getListByPagenate,配置好以后如下

<?xml  version="1.0" encoding="UTF-8"?>mapper  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">                insert into Visitor (Name, Email, Status, CreateTime)        values (#{name}, #{email}, #{status}, #{createTime})                delete from Visitor where        status>0 and id = #{id}                update Visitor set Name =        #{name}, Email=#{email}, Status=#{status} where id=#{id} and Status>0;                select Id,        Name, Email, Status, CreateTime from visitor where id=#{id} and        Status>0 order by Id                select *        from visitor where id=#{id} and        Status>0 order by Id                                select * from Visitor where        status>0                                                                    select * from (                 ) t         -1 and pageSize>-1">            limit #{pageStart}, #{pageSize}                        order by ${orderFieldStr} ${orderDirectionStr}    

这里面的字段属性都是针对PagenateArgs参数类中的属性名,保持一致。

-1 and pageSize>-1">    limit #{pageStart}, #{pageSize}

在DemoRun类中创建测试方法:

/* * 分页参数 */public static void queryVisitorListWithPagenate(int pageIndex, int pageSize, String orderField, String orderDire) {    PagenateArgs args = new PagenateArgs(pageIndex, pageSize, orderField, orderDire);    SqlSession session = MybatisUtils.getSqlSession();    IVisitorOperation vOperation = session.getMapper(IVisitorOperation.class);    List visitors = vOperation.getListByPagenate(args);    for (Visitor visitor : visitors) {        System.out.println(visitor);    }    MybatisUtils.closeSession(session);    MybatisUtils.showMessages(CRUD_Enum.List, visitors.size());}

DemoRun.queryVisitorListWithPagenate(0, 100, "id", SortDirectionEnum.DESC.toString());

运行后下测试结果,先按Id倒序排列,查的Visitor表一共有14条记录,

358e2883f42d76804946698f3bf2ca3b.png

假设取在第2页取5条,执行下面也就是6-10条数据,这样传参数就行了

DemoRun.queryVisitorListWithPagenate(1, 5, "id", SortDirectionEnum.DESC.toString());

结果如下:

c680d88d740b43bcb6b70fd4a58662d4.png

实现了一个分页逻辑.

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐