使用Mybatis的PageHelper插件实现分页

10 篇文章 0 订阅
2 篇文章 0 订阅

分页查询是一个非常普遍的操作,记得最开始实现分页的时候还是自己在JS中保存两个全局变量,用来记录当前页数和每页记录条数,然后在SQL中动态得去拼装LIMIT语句(MySQL),这个实现过程没有任何的业务逻辑,也没有任何的难度,但是就是很麻烦,后来慢慢得接触到了一些分页的插件,让这一过程变得非常的方便,大大地增加了开发的效率,今天就说一说Mybatis的分页插件PageHelper的使用。

首先说明一下PageHelper只能用于Mybatis,Hibernate使用的分页插件是Pageable(之后会分享其用法),测试的demo是搭建在SpringBoot上的,这里的重点就放在数据访问层上面,控制层、服务层这些就直接忽略,话不多说,进入正题。

首先贴出两个Mapper:

MyMapper.java

package priv.cwr.mapper;

import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;

/**
 * 通用Mapper
 * User: R
 * Date: 2018/9/19
 * Time: 15:22
 * Created with IntelliJ IDEA.
 */
public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T> {
}

MyMapper是抽出来的一个公用的接口,是为了使用Mybatis里面自带的一些方法和属性。

UserMapper.java

package priv.cwr.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import priv.cwr.model.db.UserEntity;

/**
 * 用户Mapper
 */
@Mapper
@Repository
public interface UserMapper extends MyMapper<UserEntity> {

}

UserMapper就是和用户相关的Mapper。

UserEntity.java

package priv.cwr.model.db;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

/**
 * 用户实体类
 */
@Data
@Table(name = "t_user")
public class UserEntity {
    @Id
    @GeneratedValue(generator = "JDBC")
    @Column(name = "user_id")
    @JsonProperty("user_id")
    private Long userId;

    private String name;

    private Integer gender;

    private String phone;

    private String note;

    public String toString(){
        return "user_id:" + this.userId
                + ",name:" + this.name
                + ",gender:" + this.gender
                + ",phone:" + this.phone
                + ",note:" + this.note;
    }
}

测试方法

package priv.cwr;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import priv.cwr.mapper.UserMapper;
import priv.cwr.model.db.UserEntity;


@RunWith(SpringRunner.class)
@SpringBootTest
public class CwrUserCenterApplicationTests {

	@Autowired
	private UserMapper userMapper;

	@Test
	public void contextLoads() {
		Page<UserEntity> page1 = PageHelper.startPage(1,10)
				.doSelectPage(() -> this.userMapper.selectAll());
		System.out.println("page1 pageNumber -> 1 pageSize -> 10");
		page1.forEach(System.out::println);
		Page<UserEntity> page2 = PageHelper.startPage(1,2)
				.doSelectPage(() -> this.userMapper.selectAll());
		System.out.println("page2 pageNumber -> 1 pageSize -> 2");
		page2.forEach(System.out::println);

	}

}

结果如下

总结一下

PageHelper的调用链主要有两个方法:

        startPage(int pageNum, int pageSize) :参数分别为查询页数和每页记录条数;

        doSelectPage(ISelect select)

selectAll()方法是Mybatis的SelectAllMapper接口中的一个方法,查询出了所有的用户信息(一共只有四条数据),两个相同的方法通过分页参数(pageNum和pageSize)的不同实现了分页查询。

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值