下面是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技术站