mybatis mysql 分页_MyBatis怎样实现MySQL动态分页

展开全部

在这636f70793231313335323631343130323136353331333337623463些控件里要达到分页的效果,一般都会传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,配置好以后如下

mapper

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

keyProperty="Id">

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

resultType="Visitor">

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条记录,

a279cdb264f7586982edee6f683441ed.png

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

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

结果如下:

5d2ebf84274fce9472d60c0857b814df.png

实现了一个分页逻辑.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值