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 时,存在 性能问题

参考资料

相关推荐
张张张31216 分钟前
4.2学习总结 Java:list系列集合
java·学习
KATA~19 分钟前
解决MyBatis-Plus枚举映射错误:No enum constant问题
java·数据库·mybatis
SuperW31 分钟前
linux课程学习二——缓存
学习
杉之2 小时前
SpringBlade 数据库字段的自动填充
java·笔记·学习·spring·tomcat
伊成4 小时前
Springboot整合Mybatis+Maven+Thymeleaf学生成绩管理系统
java·maven·mybatis·springboot·学生成绩管理系统
Song4 小时前
JVM 学习计划表(2025 版)
jvm·学习
小杨爱学习zb4 小时前
学习总结 网格划分+瞬态求解设置
笔记·学习·算法
互联网上的猪4 小时前
Excel时间类型函数(包括today、date、eomonth、year、month、day、weekday、weeknum、datedif)
笔记·学习·excel
我要学编程(ಥ_ಥ)5 小时前
初始JavaEE篇 —— Mybatis-plus 操作数据库
java·java-ee·mybatis·mybatis-plus
weixin_535455795 小时前
WPF设计学习记录滴滴滴2
学习·wpf