Mybatis 学习之 分页实现

文章目录

  • [1. Mybatis](#1. Mybatis)
    • [1.1. 代码实现](#1.1. 代码实现)
  • [2. Mybatis Plus](#2. Mybatis Plus)
    • [2.1. 代码实现](#2.1. 代码实现)
    • [2.2. 特别注意](#2.2. 特别注意)
  • [3. PageHelper](#3. PageHelper)
    • [3.1. 代码实现](#3.1. 代码实现)
    • [3.2. 特别注意](#3.2. 特别注意)
  • 参考资料

1. Mybatis

1.1. 代码实现

java 复制代码
package com.example.demo;

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

@MapperScan(value = "com.example.demo.mapper")
@SpringBootApplication
public class DemoApplication {

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

}
java 复制代码
package com.example.demo.mapper;

import com.example.demo.model.SysUser;
import com.example.demo.model.page.BasePageReq;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface UserMapper {

    List<SysUser> page(@Param(value = "pageReq") BasePageReq pageReq);

}
xml 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.example.demo.mapper.UserMapper">

    <select id="page" resultType="com.example.demo.model.SysUser">
        <bind name="startIndex" value="(pageReq.pageNum-1)*pageReq.pageSize"/>
        SELECT 
        	ID AS id, 
        	NAME AS name, 
        	AGE AS age
        FROM SYS_USER
        ORDER BY ID ASC
        LIMIT #{startIndex}, #{pageReq.pageSize}
    </select>

</mapper>
yml 复制代码
mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.example.demo.model
xml 复制代码
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>2.3.0</version>
</dependency>

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>8.0.15</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<version>1.18.24</version>
	<scope>provided</scope>
</dependency>
<dependency>
	<groupId>com.google.guava</groupId>
	<artifactId>guava</artifactId>
	<version>30.1-jre</version>
</dependency>

2. Mybatis Plus

2.1. 代码实现

java 复制代码
package com.example.demo;

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

@MapperScan(value = "com.example.demo.mapper")
@SpringBootApplication
public class DemoApplication {

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

}
java 复制代码
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

Page<SysUser> list = userMapper.page(new Page<>(pageReq.getPageNum(), pageReq.getPageSize()));
java 复制代码
package com.example.demo.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.model.SysUser;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface UserMapper {

    Page<SysUser> page(@Param(value = "pageReq") IPage<SysUser> pageReq);

}
java 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.example.demo.mapper.UserMapper">

    <select id="page" resultType="com.example.demo.model.SysUser">
        SELECT ID AS id, NAME AS name, AGE AS age
        FROM SYS_USER
        ORDER BY ID ASC
    </select>

</mapper>
yml 复制代码
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  type-aliases-package: com.example.demo.model
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
xml 复制代码
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
	<groupId>com.baomidou</groupId>
	<artifactId>mybatis-plus-boot-starter</artifactId>
	<version>3.5.1</version>
</dependency>
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>8.0.15</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<version>1.18.24</version>
	<scope>provided</scope>
</dependency>
<dependency>
	<groupId>com.google.guava</groupId>
	<artifactId>guava</artifactId>
	<version>30.1-jre</version>
</dependency>

2.2. 特别注意

  • Mybatis Plus 分页功能中使用了 CCJSqlParser,其中 CCJSqlParser#Statement 在处理 复杂 SQL 时,存在 性能问题

3. PageHelper

3.1. 代码实现

java 复制代码
package com.example.demo;

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

@MapperScan(value = "com.example.demo.mapper")
@SpringBootApplication
public class DemoApplication {

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

}
java 复制代码
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;

Page<SysUser> list = PageHelper.startPage(pageReq.getPageNum(), pageReq.getPageSize()).doSelectPage(() -> userMapper.page());
java 复制代码
package com.example.demo.mapper;

import com.example.demo.model.SysUser;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface UserMapper {

    List<SysUser> page();

}
xml 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.example.demo.mapper.UserMapper">

    <select id="page" resultType="com.example.demo.model.SysUser">
        SELECT ID AS id, NAME AS name, AGE AS age
        FROM SYS_USER
        ORDER BY ID ASC
    </select>

</mapper>
yml 复制代码
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  type-aliases-package: com.example.demo.model
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
xml 复制代码
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
	<groupId>com.baomidou</groupId>
	<artifactId>mybatis-plus-boot-starter</artifactId>
	<version>3.5.1</version>
</dependency>
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>8.0.15</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<dependency>
	<groupId>com.github.pagehelper</groupId>
	<artifactId>pagehelper</artifactId>
	<version>5.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<version>1.18.24</version>
	<scope>provided</scope>
</dependency>
<dependency>
	<groupId>com.google.guava</groupId>
	<artifactId>guava</artifactId>
	<version>30.1-jre</version>
</dependency>

3.2. 特别注意

  • PageHelper 分页功能中使用了 CCJSqlParser,其中 CCJSqlParser#Statement 在处理 复杂 SQL 时,存在 性能问题

参考资料

相关推荐
ThreeYear_s21 分钟前
电力电子技术学习路径与FPGA/DSP技术结合方向(gemini生成)
学习·fpga开发
好奇龙猫1 小时前
【生活相关-日语-日本-入国&出国-海关&市役所(4)-办理手续】
学习·生活
sendnews1 小时前
红松小课如何成为激活老年人生活的新引擎?从兴趣学习到价值重塑!
学习·生活
The_Second_Coming1 小时前
ELK 学习笔记
笔记·学习·elk
wdfk_prog1 小时前
[Linux]学习笔记系列 -- [kernel][time]timekeeping
linux·笔记·学习
2301_796512521 小时前
Rust编程学习 - 如何理解Rust 语言提供了所有权、默认move 语义、借用、生命周期、内部可变性
java·学习·rust
charlie1145141912 小时前
从零开始理解 CSS:让网页“活”起来的语言2
前端·css·笔记·学习·选择器·样式表·原生
im_AMBER2 小时前
Leetcode 46
c语言·c++·笔记·学习·算法·leetcode
2301_796512522 小时前
Rust编程学习 - 内存分配机制,如何动态大小类型和 `Sized` trait
学习·算法·rust
秦明月133 小时前
EPLAN电气设计:快捷键版本差异解析
经验分享·学习·学习方法·设计规范