1. 程式人生 > >Sprin Boot2.0之整合Mybatis整合分頁外掛

Sprin Boot2.0之整合Mybatis整合分頁外掛

pageHelper

PageHelper 是一款好用的開源免費的 Mybatis 第三方物理分頁外掛

物理分頁

支援常見的 12 種資料庫。Oracle,MySql,MariaDB,SQLite,DB2,PostgreSQL,SqlServer 等

支援多種分頁方式

支援常見的 RowBounds(PageRowBounds),PageHelper.startPage 方法呼叫,Mapper 介面引數呼叫

 

pageHelper底層會幫助生成一下分頁語句  limit相關

廢話不多說,趕緊動手!

pom檔案:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>pageHelper</groupId>
  <artifactId>com.toov5.pageHelper</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.0.RELEASE</version>
	</parent>
	<dependencies>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
		<!-- 測試 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.1.1</version>
		</dependency>
		<!-- mysql 依賴 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<!-- springboot-web元件 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- springboot 整合 pagehelper -->
		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper-spring-boot-starter</artifactId>
			<version>1.2.5</version>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.7</version>
		</dependency>
	</dependencies>
  
</project>

 application.properties

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver


logging.level.com.example.demo.dao=DEBUG
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql
pagehelper.page-size-zero=true

entity:

package com.toov5.entity;

import lombok.Data;

@Data
public class User {

    private Integer id;
    private String name;
    private Integer age;
}

 

mapper:

package com.toov5.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Select;

import com.toov5.entity.User;

public interface UserMapper { @Select("SELECT * FROM USERS ") List<User> findUserList(); }

service

package com.toov5.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.toov5.entity.User;
import com.toov5.mapper.UserMapper;

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;
    //當前頁 一頁多少個  mysql通過limit分頁的哈
    public PageInfo<User> findUserList(int page, int size) {
        // 開啟分頁外掛,放在查詢語句上面 幫助生成分頁語句
        PageHelper.startPage(page, size); //底層實現原理採用改寫語句   將下面的方法中的sql語句獲取到然後做個拼接 limit  AOPjishu 
        List<User> listUser = userMapper.findUserList();
        // 封裝分頁之後的資料  返回給客戶端展示  PageInfo做了一些封裝 作為一個類
        PageInfo<User> pageInfoUser = new PageInfo<User>(listUser);
        return pageInfoUser;
    }

}

controller

package com.toov5.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.github.pagehelper.PageInfo;
import com.toov5.entity.User;
import com.toov5.service.UserService;

@RestController
public class IndexController {
    @Autowired
    private UserService userService;

    @RequestMapping("/findUserList")
    public PageInfo<User> findUserList(int page, int size) {
        System.out.println("#############################");
        return userService.findUserList(page, size);
    }

}

啟動類

package com.toov5;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@MapperScan("com.toov5.*")
@SpringBootApplication
public class PageHelper {

    public static void main(String[] args) {
        SpringApplication.run(PageHelper.class, args);
    }

} 

專案啟動:

訪問

 

json解析:

{
	"total": 4,
	"list": [{
		"id": 1,
		"name": "toov5",
		"age": 12
	}, {
		"id": 2,
		"name": "cc",
		"age": 99
	}],
	"pageNum": 1,
	"pageSize": 2,
	"size": 2,
	"startRow": 1,
	"endRow": 2,
	"pages": 2,
	"prePage": 0,
	"nextPage": 2,
	"isFirstPage": true,
	"isLastPage": false,
	"hasPreviousPage": false,
	"hasNextPage": true,
	"navigatePages": 8,
	"navigatepageNums": [1, 2],
	"navigateFirstPage": 1,
	"navigateLastPage": 2,
	"firstPage": 1,
	"lastPage": 2
}

  小夥伴們是不是返回的資訊量十足呀~

PS:如果每個查詢方面前面都這樣:

 

如果每個方法查詢之前 之後 都加這麼個方法的話 很冗餘啊

冗餘 則 aop封裝 

 模板設計方法模式!!!哈哈哈  有興趣的可以玩玩