Springboot 整合通用mapper和pagehelper展示分页数据的问题(附github源码)

yizhihongxing

下面是Spring Boot整合通用Mapper和PageHelper展示分页数据问题的完整攻略。

简介

在使用Spring Boot搭建项目时,如果需要使用分页功能,可以通过集成通用Mapper和PageHelper实现。

通用Mapper是MyBatis通用Mapper的Spring Boot Starter实现,可以快速地实现单表的CRUD操作,无需编写Mapper.xml文件。而PageHelper是MyBatis物理分页插件,可以在进行分页查询时,自动拦截SQL语句并修改为分页SQL语句,返回分页的数据。

本攻略将详细讲解Spring Boot整合通用Mapper和PageHelper展示分页数据的过程,并提供两个示例说明。

示范一:分页查询用户列表

我们将使用一个简单的示例,来说明如何使用通用Mapper和PageHelper展示分页数据。

准备工作

首先,我们需要创建一个数据库表,用来存储用户的信息。以下是创建user表的SQL语句:

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',
  `name` varchar(255) NOT NULL COMMENT '姓名',
  `age` int(11) NOT NULL COMMENT '年龄',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

接下来,我们需要新建一个Spring Boot项目,并在pom.xml文件中添加通用Mapper和PageHelper的依赖,如下所示:

<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>2.1.5</version>
</dependency>

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.3.0</version>
</dependency>

然后,我们需要在application.properties文件中配置数据库连接信息,如下所示:

spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

编写实体类

接下来,我们需要编写用户的实体类User,如下所示:

@Data
@Table(name = "user")
public class User implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private String name;

    private Integer age;
}

其中,@Data注解是Lombok提供的注解,可以自动生成setter/getter方法。@Table、@Id、@GeneratedValue等注解是通用Mapper提供的注解,用于映射实体与数据表。

编写Mapper接口

然后,我们需要编写Mapper接口UserMapper,如下所示:

public interface UserMapper extends Mapper<User> {

}

其中,继承自通用Mapper提供的Mapper接口,无需编写Mapper.xml文件,即可自动实现单表CRUD操作。

编写控制器

最后,我们需要编写控制器UserController,实现分页查询用户列表的功能,如下所示:

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserMapper userMapper;

    @GetMapping("/list")
    public PageInfo<User> list(@RequestParam(defaultValue = "1") Integer pageNum,
                               @RequestParam(defaultValue = "5") Integer pageSize) {
        // 设置分页参数
        PageHelper.startPage(pageNum, pageSize);

        // 查询数据
        List<User> list = userMapper.selectAll();

        // 返回分页信息
        return new PageInfo<>(list);
    }
}

其中,@RestController注解表示该类是一个控制器,@RequestMapping注解表示该控制器的基本请求路径为"/user"。通过@Autowired注解,自动注入UserMapper接口。

在list方法中,我们使用PageHelper.startPage方法设置分页参数,然后通过userMapper.selectAll方法查询用户列表,最后通过PageInfo类包装查询结果,返回分页信息。

测试结果

完成上述步骤后,我们可以启动Spring Boot应用程序,在浏览器中输入"http://localhost:8080/user/list?pageNum=1&pageSize=5",即可展示第一页的用户列表。

示例二:导入Excel并分页展示

我们将使用第二个示例,来说明如何使用通用Mapper和PageHelper导入Excel数据并分页展示。

准备工作

首先,我们需要创建一个数据库表,用来存储Excel数据。以下是创建import_data表的SQL语句:

CREATE TABLE `import_data` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',
  `name` varchar(255) NOT NULL COMMENT '姓名',
  `age` int(11) NOT NULL COMMENT '年龄',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

接下来,我们需要新建一个Spring Boot项目,并在pom.xml文件中添加通用Mapper、PageHelper和poi依赖,如下所示:

<!-- 通用Mapper依赖 -->
<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>2.1.5</version>
</dependency>

<!-- PageHelper依赖 -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.3.0</version>
</dependency>

<!-- poi依赖 -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.2</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.2</version>
</dependency>

然后,我们需要在application.properties文件中配置数据库连接信息,如下所示:

spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

编写实体类

接下来,我们需要编写数据的实体类ImportData,如下所示:

@Data
@Table(name = "import_data")
public class ImportData implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private String name;

    private Integer age;
}

编写Mapper接口

然后,我们需要编写Mapper接口ImportDataMapper,如下所示:

public interface ImportDataMapper extends Mapper<ImportData> {

}

编写控制器

接下来,我们需要编写控制器ImportDataController,实现导入Excel并分页展示数据的功能,如下所示:

@RestController
@RequestMapping("/import")
public class ImportDataController {
    @Autowired
    private ImportDataMapper importDataMapper;

    @PostMapping("/upload")
    public String upload(@RequestParam("file") MultipartFile file) throws Exception {
        // 判断文件是否为空
        if (file.isEmpty()) {
            return "文件为空,请重新上传!";
        }

        // 获取上传文件名
        String fileName = file.getOriginalFilename();

        // 判断文件类型是否正确
        if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) {
            return "文件格式不正确,请上传Excel文件!";
        }

        // 解析Excel文件
        List<ImportData> list = new ArrayList<>();
        Workbook workbook = null;
        if (fileName.endsWith(".xls")) {
            workbook = new HSSFWorkbook(file.getInputStream());
        } else {
            workbook = new XSSFWorkbook(file.getInputStream());
        }
        Sheet sheet = workbook.getSheetAt(0);
        int rowCount = sheet.getPhysicalNumberOfRows();
        for (int i = 1; i < rowCount; i++) {
            Row row = sheet.getRow(i);
            if (row != null) {
                Cell nameCell = row.getCell(0);
                Cell ageCell = row.getCell(1);
                if (nameCell != null && ageCell != null) {
                    String name = nameCell.getStringCellValue();
                    int age = (int) ageCell.getNumericCellValue();
                    ImportData data = new ImportData();
                    data.setName(name);
                    data.setAge(age);
                    list.add(data);
                }
            }
        }

        // 批量插入数据
        importDataMapper.insertList(list);

        return "数据导入成功!";
    }

    @GetMapping("/list")
    public PageInfo<ImportData> list(@RequestParam(defaultValue = "1") Integer pageNum,
                                     @RequestParam(defaultValue = "10") Integer pageSize) {
        // 设置分页参数
        PageHelper.startPage(pageNum, pageSize);

        // 查询数据
        List<ImportData> list = importDataMapper.selectAll();

        // 返回分页信息
        return new PageInfo<>(list);
    }
}

其中,@RestController注解表示该类是一个控制器,@RequestMapping注解表示该控制器的基本请求路径为"/import"。通过@Autowired注解,自动注入ImportDataMapper接口。

在upload方法中,我们首先判断上传的文件是否为空,并获取上传的文件名。接着,判断文件类型是否正确,然后解析Excel文件,将数据插入到import_data表中。

在list方法中,我们使用PageHelper.startPage方法设置分页参数,然后通过importDataMapper.selectAll方法查询数据列表,最后通过PageInfo类包装查询结果,返回分页信息。

测试结果

完成上述步骤后,我们可以启动Spring Boot应用程序,在浏览器中输入"http://localhost:8080/import/list?pageNum=1&pageSize=10",即可展示第一页的数据列表。

在数据列表页面中,我们可以通过"选择文件"按钮选择Excel文件,并点击"导入数据"按钮,将Excel中的数据导入到数据库中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Springboot 整合通用mapper和pagehelper展示分页数据的问题(附github源码) - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • vscode搭建go开发环境案例详解

    下面我将分享一下“vscode搭建go开发环境案例详解”的完整攻略,包含两条示例说明的过程。 环境准备 在开始搭建go开发环境前,需要先安装以下软件: Go语言开发环境 Visual Studio Code(简称VS Code) Go语言开发环境可以去官网下载,这里不再赘述。安装好Go后,需要设置以下环境变量: set GOROOT=Go的安装目录 set …

    GitHub 2023年5月16日
    00
  • vs2012配置gitHub管理代码详细步骤

    配置Github账号 在VS2012中配置GitHub账号,为上传项目代码到GitHub打下基础。 首先,需要在GitHub上注册一个账号,然后在Visual Studio中安装GitHub扩展插件并登录账号。 具体步骤: 1)在Visual Studio中打开工具菜单,选择“扩展和更新”2)在左侧菜单栏选择“Online”3)搜索GitHub并安装GitH…

    GitHub 2023年5月16日
    00
  • VUE饿了么树形控件添加增删改功能的示例代码

    下面我将为您详细讲解如何实现VUE饿了么树形控件添加增删改功能的示例代码,这个过程包含两条示例说明。 示例1:如何添加节点 首先,我们需要在vue组件中导入饿了么UI库的el-tree组件,同时引入element-ui的css文件: <template> <el-tree :data="data"></el-…

    GitHub 2023年5月16日
    00
  • 微信小程序生成二维码的示例代码

    当你在开发微信小程序时,需要生成二维码来引导用户扫描进入小程序,以下是生成二维码的完整攻略: 步骤一:导入Qrcode.js 导入Qrcode.js可以帮助你轻松生成二维码,你可以在github上下载该库https://github.com/davidshimjs/qrcodejs。 步骤二:生成二维码 示例一: <!–在HTML中新建一个容器,用于…

    GitHub 2023年5月16日
    00
  • 55分钟学会正则表达式(来自Github)

    55分钟学会正则表达式(来自Github)- 完整攻略 正则表达式是一种强大的文本处理工具,它可以对文本进行高效的搜索、匹配和替换等任务。本文介绍的是一篇开源项目Github上的“55分钟学会正则表达式”的完整攻略。该攻略通过简单易懂的语言和实例来让初学者快速入门正则表达式的使用。 第一步:正则表达式基础知识 本攻略将简要介绍正则表达式中的基础元字符。这些元…

    GitHub 2023年5月16日
    00
  • Git 教程之基本操作详解

    Git 教程之基本操作详解 概述 Git是一种分布式版本控制系统,是为了更好地管理大型代码库而设计的。Git具有速度快、存储能力强等优点,在软件开发中得到广泛应用。本文将介绍Git的基本操作,包括Git的安装等内容。 安装 Git 在安装Git之前,您需要确认自己的操作系统。不同的操作系统,安装Git的方式也不同。我们以Windows操作系统为例,介绍Git…

    GitHub 2023年5月16日
    00
  • 执行go vendor第三方包版本冲突问题解决

    当我们在开发一个Go项目时,一般都会用到许多第三方的包。在引入这些包时,往往会存在版本管理的问题。例如,我们项目中使用的两个不同的第三方包,版本号分别是v1.0和v1.2,但是它们依赖的第三方包是相同的,而且版本号也不一致。这就会造成版本冲突的问题,导致我们的项目编译时出现错误。 为了解决这个问题,有许多方法。一个常见的方法是使用Go Modules来管理依…

    GitHub 2023年5月16日
    00
  • Golang中基础的命令行模块urfave/cli的用法说明

    Golang是一种开发高效、安全和可维护软件应用程序的编程语言,广泛应用于网络编程和系统编程中。Golang中基础的命令行模块 urfave/cli 提供了一种简单的方法来处理命令行参数和选项,它的主要功能包括处理命令行选项、参数、帮助信息、全局选项等功能。下面将详细讲解 urfave/cli 的用法。 安装 urfave/cli 可以使用 go get 命…

    GitHub 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部