【MySQL × SpringBoot 突发奇想】全面实现流程 · 数据库导出Excel表格文件的接口

本文主要是介绍【MySQL × SpringBoot 突发奇想】全面实现流程 · 数据库导出Excel表格文件的接口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 【MySQL × SpringBoot 小点子】全面实现流程 · 数据库导出Excel表格文件的接口
    • 1. 什么是VO(View Object)对象
    • 2. BeanCopyUtils进行两个对象的数据转移
    • 3. mapper层实现
    • 4. service层实现
    • 5. vo对象创建
    • 6. 保存路径配置
    • 7. controller层核心代码实现
    • 8. wagger接口
    • 9. 补充

img

【MySQL × SpringBoot 小点子】全面实现流程 · 数据库导出Excel表格文件的接口

在上一篇博客,【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口_s:103的博客-CSDN博客

我们学习了如何导入表格,现在我们反过来,看看如何导出表格~

1. 什么是VO(View Object)对象

网络资料:

View Object(视图对象)是一种在软件开发中常见的设计模式,它用于在用户界面(UI)层与业务逻辑层(业务模型)之间进行数据交互。其主要目的是在UI层提供一个面向用户的数据模型,将业务模型中的数据进行适配、处理和展示,从而实现UI与业务逻辑的解耦。

View Object具有以下特点和作用:

  1. 封装数据:View Object通过封装业务模型中的数据,将其进行适配和转换,以适应UI层的需求。它可以包含计算属性、格式化数据、过滤数据等操作,使得UI层能够更直接地访问和展示数据。

  2. 提供友好的数据接口:View Object通常会为UI层提供简单和易于使用的数据接口,使得UI层可以轻松地获取和修改其中的数据。它往往会提供诸如getters、setters、事件通知等方法,以便UI层对其数据进行操作和监听。

  3. 简化UI开发:通过使用View Object,UI开发人员可以专注于UI设计和交互逻辑的实现,而无需过多关注业务逻辑的处理和数据处理等细节。同时,View Object还可以提供数据验证、状态管理等功能,简化UI开发过程。

  4. 实现UI与业务逻辑的解耦:View Object作为UI层与业务逻辑层之间的中间层,可以实现两者的解耦。它可以根据UI层的需求对业务模型进行适配,使得业务模型的变化对UI层来说是透明的,从而提高系统的灵活性和可维护性。

需要注意的是,View Object并不是所有项目中必须存在的概念,它在一些复杂的UI交互、数据处理较为复杂的场景下更常见,并且在不同的技术栈和框架中实现方式也会有所差异。

我觉得最重要的一点就是,满足前端需求的一组数据

在前后端交互过程中,一般有三种情况:

  1. 后端的一个实体类需要删减一些数据,不发给前端
  2. 后端的一个实体类需要多加一些数据,发给前端
  3. 后端的一个实体类全部信息都发给前端

第三种不必多说,正常写代码;

第二种我们也很常见,vo对象扩展我们的实体类,新增属性,例如联合对象啥的,也可以通过返回哈希表实现;

第一种我们也可以实现,可以通过注解让一个属性不参与序列化而实现,也可以用一个vo对象,其中只包含实体类的一部分属性,之后通过一个方法,将实体类与vo对象之间进行数据赋值。

2. BeanCopyUtils进行两个对象的数据转移

名字是这样的,我们也可以作用于不是bean对象的呀~

public class BeanCopyUtils {private BeanCopyUtils() {}/** 单个对象*/public static <V> V copyBean(Object source, Class<V> clazz) {/** 创建目标对象 实现属性拷贝*/V result = null;try {result = clazz.newInstance();/** 拷贝*/BeanUtils.copyProperties(source, result);} catch (Exception e) {e.printStackTrace();}return result;}/** 集合*/public static <O, V> List<V> copyBeanList(List<O> list, Class<V> clazz) {/** 创建目标对象 实现属性拷贝*/return list.stream().map(o -> copyBean(o, clazz)).collect(Collectors.toList());}
}
  1. copyBean方法,将第一个参数转换为第二个参数(类对象)的类型
    • 转化逻辑是通过相同的属性名
  2. copyBeanList方法,将第一个参数列表转换为第二个参数(类对象)的类型的列表
    • 转化逻辑是通过相同的属性名

3. mapper层实现

这里我图方便,直接用注解实现mapper方法

示例:

在这里插入图片描述

小开发是这样的,正经开发可不是这样不严谨的喔!

4. service层实现

示例:

在这里插入图片描述

5. vo对象创建

示例:Course对象的表格展示vo对象

@Data
@NoArgsConstructor
@AllArgsConstructor
@ExcelTarget("excelCourse")//表格实体类的id,可以针对一个实体类做不同导出,本文暂时不涉及
public class ExcelCourseVo {@Excel(name = "course", width = 20)//列名、宽度private String course_name;@Excel(name = "credit", width = 20)private BigDecimal credit;@Excel(name = "school", width = 20)private Integer school_year;@Excel(name = "semester", width = 20)private Integer semester;
}

6. 保存路径配置

在这里插入图片描述

public class Constants {// excel表public static final String XLSX_DIR = "D:\\study\\excel";public static final String XLSX_NAME1 = "easypoi1.xlsx";public static final String XLSX_NAME2 = "easypoi2.xlsx";public static final String XLSX_NAME3 = "easypoi3.xlsx";public static final String XLSX_NAME4 = "easypoi4.xlsx";}

7. controller层核心代码实现

示例:

@GetMapping("/print")
@ApiOperation("打印表格")
public void print() {List<Course> list = courseService.selectAll();List<ExcelCourseVo> excelCourseVos = BeanCopyUtils.copyBeanList(list, ExcelCourseVo.class);// 导出ExportParams params = new ExportParams();params.setTitle("测试");// 表格左下角sheet名称params.setSheetName("课程信息");Workbook workbook = ExcelExportUtil.exportExcel(params, ExcelCourseVo.class, excelCourseVos);try{// 文件夹是否存在,若没有对应文件夹直接根据路径生成文件会报错File folder = new File(Constants.XLSX_DIR);if (!folder.exists() && !folder.isDirectory()) {folder.mkdirs();}// 文件是否存在File file = new File(Constants.XLSX_DIR + "\\" + Constants.XLSX_NAME1);if (!file.exists()){file.createNewFile();}// 输出流写入(覆盖)FileOutputStream outputStream = new FileOutputStream(Constants.XLSX_DIR + "\\" + Constants.XLSX_NAME1);workbook.write(outputStream);// 关闭写,不然用户点击生成的文件会显示只读outputStream.close();workbook.close();}catch (IOException e){e.printStackTrace();}System.out.println("打印成功");
}

8. wagger接口

示例:

在这里插入图片描述

找到对应目录:

在这里插入图片描述

导出成功:

在这里插入图片描述

9. 补充

你如果比较懒,那就用原始的那个实体类对象就行了:

  • 因为实体类和vo对象在程序眼里都是自定义的类罢了,只是我们人为的给他们意义

在这里插入图片描述

效果:

在这里插入图片描述

强烈注意: 对表格的列名起名要正常,可以是中文啥的,但是不要出现一些奇奇怪怪的字符,例如下划线就不行,这是我血的教训😔😔😔


文章到此结束!谢谢观看
可以叫我 小马,我可能写的不好或者有错误,但是一起加油鸭🦆

代码:memory · 游离态/马拉圈2023年10月 - 码云 - 开源中国 (gitee.com)


这篇关于【MySQL × SpringBoot 突发奇想】全面实现流程 · 数据库导出Excel表格文件的接口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/215710

相关文章

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

浅谈mysql的not exists走不走索引

《浅谈mysql的notexists走不走索引》在MySQL中,​NOTEXISTS子句是否使用索引取决于子查询中关联字段是否建立了合适的索引,下面就来介绍一下mysql的notexists走不走索... 在mysql中,​NOT EXISTS子句是否使用索引取决于子查询中关联字段是否建立了合适的索引。以下