栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring Boot+Mybatis+Pagehelper分页实现

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Boot+Mybatis+Pagehelper分页实现

Spring Boot 集成MyBatis和Pagehelper分页插件

mybatis-spring-boot-starter依赖树如下:

pom配置


  4.0.0
  com.xiaolyuh
  spring-boot-student-mybatis
  0.0.1-SNAPSHOT
  jar
  spring-boot-student-mybatis

  
  
    org.springframework.boot
    spring-boot-starter-parent
    1.5.3.RELEASE
     
  

  
    UTF-8
    UTF-8
    1.8
  

  
    
      org.springframework.boot
      spring-boot-starter
    
    
      org.springframework.boot
      spring-boot-starter-web
    
    
      mysql
      mysql-connector-java
    

    
      org.mybatis.spring.boot
      mybatis-spring-boot-starter
      1.3.0
    
    
    
      com.github.pagehelper
      pagehelper-spring-boot-starter
      1.1.1
    

    
      com.alibaba
      fastjson
      1.2.31
    

    
      org.springframework.boot
      spring-boot-starter-test
      test
    
  

  
    
      
 org.springframework.boot
 spring-boot-maven-plugin
      
    
  



application.properties配置

server.port=80
# 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/ssb_test
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
#连接池配置
#spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource

#mybatis
#entity扫描的包名
mybatis.type-aliases-package=com.xiaolyuh.domain.model
#Mapper.xml所在的位置
mybatis.mapper-locations=classpath*:/mybaits
  List findAll();

  
  Page findByPage();
}

实体类

package com.xiaolyuh.domain.model;

public class Person {

  private Long id;

  
  private String name;

  
  private Integer age;

  
  private String address;

  public Long getId() {
    return id;
  }

  public void setId(Long id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public Integer getAge() {
    return age;
  }

  public void setAge(Integer age) {
    this.age = age;
  }

  public String getAddress() {
    return address;
  }

  public void setAddress(String address) {
    this.address = address;
  }
}

Service层

接口

package com.xiaolyuh.service;

import com.github.pagehelper.Page;
import com.xiaolyuh.domain.model.Person;

import java.util.List;


public interface PersonService {

  List findAll();

  
  Page findByPage(int pageNo, int pageSize);

  void insert(Person person);
}

实现类

package com.xiaolyuh.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.xiaolyuh.domain.mapper.PersonMapper;
import com.xiaolyuh.domain.model.Person;
import com.xiaolyuh.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;


@Service
@Transactional(readonly = true)
public class PersonServiceImpl implements PersonService {

  @Autowired
  private PersonMapper personMapper;

  @Override
  public List findAll() {
    return personMapper.findAll();
  }

  @Override
  public Page findByPage(int pageNo, int pageSize) {
    PageHelper.startPage(pageNo, pageSize);
    return personMapper.findByPage();
  }

  @Override
  @Transactional
  public void insert(Person person) {
    personMapper.insert(person);
  }

}

分页的包装类PageInfo

需要把Page包装成PageInfo对象才能序列化。该插件也默认实现了一个PageInfo

package com.xiaolyuh.page;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

import com.github.pagehelper.Page;


@SuppressWarnings({"rawtypes", "unchecked"})
public class PageInfo implements Serializable {
  private static final long serialVersionUID = 1L;
  //当前页
  private int pageNum;
  //每页的数量
  private int pageSize;
  //总记录数
  private long total;
  //总页数
  private int pages;
  //结果集
  private List list;
  //是否为第一页
  private boolean isFirstPage = false;
  //是否为最后一页
  private boolean isLastPage = false;


  public PageInfo() {
  }

  
  public PageInfo(List list) {
    if (list instanceof Page) {
      Page page = (Page) list;
      this.pageNum = page.getPageNum();
      this.pageSize = page.getPageSize();

      this.pages = page.getPages();
      this.list = page;
      this.total = page.getTotal();
    } else if (list instanceof Collection) {
      this.pageNum = 1;
      this.pageSize = list.size();

      this.pages = 1;
      this.list = list;
      this.total = list.size();
    }
    if (list instanceof Collection) {
      //判断页面边界
      judgePageBoudary();
    }
  }

  
  private void judgePageBoudary() {
    isFirstPage = pageNum == 1;
    isLastPage = pageNum == pages;
  }

  public int getPageNum() {
    return pageNum;
  }

  public void setPageNum(int pageNum) {
    this.pageNum = pageNum;
  }

  public int getPageSize() {
    return pageSize;
  }

  public void setPageSize(int pageSize) {
    this.pageSize = pageSize;
  }

  public long getTotal() {
    return total;
  }

  public void setTotal(long total) {
    this.total = total;
  }

  public int getPages() {
    return pages;
  }

  public void setPages(int pages) {
    this.pages = pages;
  }

  public List getList() {
    return list;
  }

  public void setList(List list) {
    this.list = list;
  }

  public boolean isIsFirstPage() {
    return isFirstPage;
  }

  public void setIsFirstPage(boolean isFirstPage) {
    this.isFirstPage = isFirstPage;
  }

  public boolean isIsLastPage() {
    return isLastPage;
  }

  public void setIsLastPage(boolean isLastPage) {
    this.isLastPage = isLastPage;
  }

  @Override
  public String toString() {
    final StringBuffer sb = new StringBuffer("PageInfo{");
    sb.append("pageNum=").append(pageNum);
    sb.append(", pageSize=").append(pageSize);
    sb.append(", total=").append(total);
    sb.append(", pages=").append(pages);
    sb.append(", list=").append(list);
    sb.append(", isFirstPage=").append(isFirstPage);
    sb.append(", isLastPage=").append(isLastPage);
    sb.append(", navigatepageNums=");
    sb.append('}');
    return sb.toString();
  }
}

测试类

package com.xiaolyuh;

import com.github.pagehelper.Page;
import com.xiaolyuh.domain.model.Person;
import com.xiaolyuh.page.PageInfo;
import com.xiaolyuh.service.PersonService;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import com.alibaba.fastjson.JSON;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

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

 private Logger logger = LoggerFactory.getLogger(PersonMapperTests.class);

 @Autowired
 private PersonService personService;

 @Before
 public void testInsert() {
 Person person = new Person();
 person.setName("测试");
 person.setAddress("address");
 person.setAge(10);
 personService.insert(person);

 Assert.assertNotNull(person.getId());
 logger.debug(JSON.toJSonString(person));
 }

 @Test
 public void testFindAll() {
 List persons = personService.findAll();

 Assert.assertNotNull(persons);
 logger.debug(JSON.toJSonString(persons));
 }

 @Test
 public void testFindByPage() {
 Page persons = personService.findByPage(1, 2);
 // 需要把Page包装成PageInfo对象才能序列化。该插件也默认实现了一个PageInfo
 PageInfo pageInfo = new PageInfo<>(persons);
 Assert.assertNotNull(persons);
 logger.debug(pageInfo.toString());
 logger.debug(JSON.toJSonString(pageInfo));
 }

 @Test
 public void testCacheByPage() {
 long begin = System.currentTimeMillis();
 List persons = personService.findAll();
 long ing = System.currentTimeMillis();
 personService.findAll();
 long end = System.currentTimeMillis();
 logger.debug("第一次请求时间:" + (ing - begin) + "ms");
 logger.debug("第二次请求时间:" + (end - ing) + "ms");

 Assert.assertNotNull(persons);
 logger.debug(persons.toString());
 logger.debug(JSON.toJSonString(persons));
 }

}

源码

https://github.com/wyh-spring-ecosystem-student/spring-boot-student/tree/releases

到此这篇关于Spring Boot+Mybatis+Pagehelper分页实现的文章就介绍到这了,更多相关Spring Boot+Mybatis+Pagehelper分页内容请搜索考高分网以前的文章或继续浏览下面的相关文章希望大家以后多多支持考高分网!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/138409.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号