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

这篇具有很好参考价值的文章主要介绍了【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

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

最近由于学校压力,心情不太好,没咋写博客;

但最近做数据库实验的时候,数据是xlsx文件展示的,要求将这些导入数据库,我懒得去下载MySQL WorkBench等等可视化的工具,就想着写个程序来实现这个功能~

只要访问这个接口,输入xlsx表格文件的路径,就会向程序设置好的数据库的表中导入这个表格的所有数据~

借此也讲解一下数据库的表自动生成实体类和实现的方法,还有接口测试api的swagger2

1. 分析问题

主要面临几个问题:

  1. xlsx文件如何解析成Java中一个个的对象?
    • 我会将xlsx转化为json格式,再转化为对象
  2. Java的对象集合如何存入数据库?
    • 利用MyBatis框架

2. 基本配置

jdk:1.8

idea:2022.1.3

SpringBoot:2.7.6

项目创建,SpringMVC、MyBatis、lombok等框架导入和配置文件基本配置…不必多说~

  • 参考我写的文章哦!
  • 搜一下就有了

3. 数据库与表

-- 创建数据库
drop database if exists school;
CREATE database school  character set utf8mb4 collate utf8mb4_general_ci;
use school;

-- 专业设置
drop TABLE if exists major;
CREATE TABLE major (
    major_no char(4) NOT NULL primary key COMMENT '专业代码',
    GB_major_no char(6) NOT NULL COMMENT '国家专业编号',
    major_name VARCHAR(60) NOT NULL COMMENT '专业名称',
    en_major_name  VARCHAR(250) NOT NULL COMMENT '英文名称',
    length_school int NOT NULL DEFAULT 4 COMMENT '学制',
    edu_level char(6) NOT NULL DEFAULT '本科' COMMENT '培养层次',
    ddegree CHAR(12) NOT NULL COMMENT '授予学位',
    department_no CHAR(2) NOT NULL COMMENT '院系代码',
    department VARCHAR(40) NOT NULL COMMENT '院系名称'
);

-- 学生
drop TABLE if exists student;
CREATE TABLE student (
    sno char(12) NOT NULL primary key COMMENT '学生学号',
    sname char(16) NOT NULL COMMENT '学生姓名',
    sex  CHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
    birthday DATE NOT NULL COMMENT '出生日期',
    nationality  char(16) DEFAULT '汉族' COMMENT '民族',
    native VARCHAR(16) DEFAULT '东莞市' COMMENT '籍贯',
    political CHAR(12) DEFAULT '共青团员' COMMENT '政治面貌',
    district CHAR(12) NOT NULL DEFAULT '松山湖校区' COMMENT '院系代码',
    student_source VARCHAR(24) COMMENT '生源地',
    enter_year DATE NOT NULL COMMENT '入学日期',
    school_year int NOT NULL COMMENT '年级',
    class char(24) NOT NULL COMMENT '班级',
    major_no CHAR(4) NOT NULL COMMENT '专业代码',
    FOREIGN key (major_no) REFERENCES major(major_no) -- 设置副键
);

-- 课程设置
drop TABLE if EXISTS course;
CREATE TABLE course (
    school_year INT NOT NULL COMMENT '学年',
    semester  INT NOT NULL COMMENT '学期',
    course_no CHAR(8) NOT NULL COMMENT '课程代码',
    course_name VARCHAR(40) NOT NULL COMMENT '课程名称',
    credit NUMERIC(3,1) NOT NULL COMMENT '学分',
    credit_hourse  INT NOT NULL COMMENT '学时',
    course_type_1  CHAR(16) NOT NULL COMMENT '课程类别',
    course_type_2  CHAR(16) COMMENT '课程性质',
    cegment_type   CHAR(16) COMMENT '环节类别',
    examine_way   CHAR(6) COMMENT '考核方式',
    primary key (school_year, semester, course_no)
);

-- 学生选课
drop TABLE if exists select_course;
CREATE TABLE select_course (
    sno CHAR(12) NOT NULL COMMENT '学号',
    school_year int NOT NULL COMMENT '学年',
    semester  int NOT NULL COMMENT '学期',
    course_no CHAR(8) NOT NULL COMMENT '课程代码',
    score NUMERIC(6,2) COMMENT '综合成绩',
    primary key (sno, school_year, semester, course_no),
    FOREIGN key (sno) REFERENCES student(sno), -- 设置副键
    FOREIGN key (school_year, semester, course_no) REFERENCES course(school_year, semester, course_no) -- 设置副键
);

注意:由于表与表的联系,所以不能独立删除父表,如果要删除父表要先删除其子表

  • 我的习惯是直接sql再走一遍😀

不得不吐槽的是,学校的老毕登,对变量的起名,真的是有够傻的!

而且居然用常见编程语言的关键字命名!

  • 这个问题后面会讲!

4. xlsx文件的解析

4.1 导入相关第三方库的依赖

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.17</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.17</version>
</dependency>
<dependency>
    <groupId>net.minidev</groupId>
    <artifactId>json-smart</artifactId>
</dependency>

不要忘记reload

4.2 编写工具类

package com.example.demo.utils;

import lombok.extern.slf4j.Slf4j;
import net.minidev.json.JSONArray;
import net.minidev.json.JSONObject;
import org.apache.poi.ss.usermodel.*;
import java.io.FileInputStream;

/**
 * 表格处理工具类
 */
@Slf4j
public class ExcelUtils {

    public static String xlsxTransferJson(String path) {
        try {
            FileInputStream inp = new FileInputStream(path);
            Workbook workbook = WorkbookFactory.create(inp);
            //获取sheet数
            int sheetNum = workbook.getNumberOfSheets();
            JSONObject jsonObject = new JSONObject();
            for (int s = 0; s < sheetNum; s++) {
                // Get the Sheet of s.
                Sheet sheet = workbook.getSheetAt(s);
                //获取最大行数
                int rownum = sheet.getPhysicalNumberOfRows();
                if (rownum <= 1) {
                    continue;
                }
                //获取第一行
                Row row1 = sheet.getRow(0);
                //获取最大列数
                int colnum = row1.getPhysicalNumberOfCells();
                JSONArray jsonArray = new JSONArray();
                for (int i = 1; i < rownum; i++) {
                    Row row = sheet.getRow(i);
                    if (row != null) {
                        //                    List<Object> list = new ArrayList<>();
                        JSONObject rowObj = new JSONObject();
                        //循环列
                        for (int j = 0; j < colnum; j++) {
                            Cell cellData = row.getCell(j);
                            if (cellData != null) {
                                //判断cell类型
                                switch (cellData.getCellType()) {
                                    case Cell.CELL_TYPE_NUMERIC: {
                                        rowObj.put(row1.getCell(j).getStringCellValue(), cellData.getNumericCellValue());
                                        break;
                                    }
                                    case Cell.CELL_TYPE_FORMULA: {
                                        //判断cell是否为日期格式
                                        if (DateUtil.isCellDateFormatted(cellData)) {
                                            //转换为日期格式YYYY-mm-dd
                                            rowObj.put(row1.getCell(j).getStringCellValue(), cellData.getDateCellValue());
                                        } else {
                                            //数字
                                            rowObj.put(row1.getCell(j).getStringCellValue(), cellData.getNumericCellValue());
                                        }
                                        break;
                                    }
                                    case Cell.CELL_TYPE_STRING: {
                                        rowObj.put(row1.getCell(j).getStringCellValue(), cellData.getStringCellValue());
                                        break;
                                    }
                                    default:
                                        rowObj.put(row1.getCell(j).getStringCellValue(), "");
                                }
                            } else {
                                rowObj.put(row1.getCell(j).getStringCellValue(), "");

                            }
                        }
                        jsonArray.add(rowObj);
                    }
                }
                return jsonArray.toJSONString();
                //                jsonObject.put(sheet.getSheetName(), jsonArray);
            }
            //            System.out.println(jsonObject.toJSONString());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

4.3 测试

右击:

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

编写测试代码,右击运行:

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

检查结果是否正确:

  • 在线 JSON 解析 | 菜鸟工具 (runoob.com)

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

无错误提示代表格式正确,解析成功

4.4 注意事项

由于json是要反序列化为java对象的,所以要将表头的列名改为 对象的属性名 一致!

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

5. 表实体类和实现类自动生成

5.1 创建目录

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

5.2 配置文件xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <!-- 驱动包路径,location中路径替换成⾃⼰本地路径 -->
    <classPathEntry location="C:/Users/马拉圈/.m2/repository/mysql/mysql-connector-java/5.1.49/mysql-connector-java-5.1.49.jar"/>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <!-- 禁⽤⾃动⽣成的注释 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
            <property name="suppressDate" value="true"/>
        </commentGenerator>
        <!-- 连接配置 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://127.0.0.1:3306/school?characterEncoding=utf8&amp;useSSL=false"
                        userId="root"
                        password="mmsszsd666">
        </jdbcConnection>
        <javaTypeResolver>
            <!-- ⼩数统⼀转为BigDecimal -->
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!-- 实体类⽣成位置 -->
        <javaModelGenerator targetPackage="com.example.demo.model"
                            targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!-- mapper.xml⽣成位置 -->
        <sqlMapGenerator targetPackage="mapper"
                         targetProject="src/main/resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!-- DAO类⽣成位置 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.example.demo.dao" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <!-- 配置⽣成表与实例, 只需要修改表名tableName, 与对应类名domainObjectName 即
       可-->
        <table tableName="course" domainObjectName="Course"
               enableSelectByExample="false"
               enableDeleteByExample="false" enableDeleteByPrimaryKey="false"
               enableCountByExample="false"
               enableUpdateByExample="false">
            <!-- 类的属性⽤数据库中的真实字段名做为属性名, 不指定这个属性会⾃动转换 _ 为
           驼峰命名规则-->
            <property name="useActualColumnNames" value="true"/>
        </table>
        <table tableName="major" domainObjectName="Major"
               enableSelectByExample="false"
               enableDeleteByExample="false" enableDeleteByPrimaryKey="false"
               enableCountByExample="false"
               enableUpdateByExample="false">
            <property name="useActualColumnNames" value="true"/>
        </table>
        <table tableName="select_course" domainObjectName="SelectCourse"
               enableSelectByExample="false" enableDeleteByExample="false"
               enableDeleteByPrimaryKey="false" enableCountByExample="false"
               enableUpdateByExample="false">
            <property name="useActualColumnNames" value="true"/>
        </table>
        <table tableName="student" domainObjectName="Student"
               enableSelectByExample="false"
               enableDeleteByExample="false" enableDeleteByPrimaryKey="false"
               enableCountByExample="false"
               enableUpdateByExample="false">
            <property name="useActualColumnNames" value="true"/>
        </table>
    </context>
</generatorConfiguration>

几个需要自定义的点:

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

5.3 启动 · 自动生成

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

成功后:

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

每次生成,会覆盖同目录下之前生成的东西,要谨慎!

删除所有实体类的getter和setter,加入注解@Data,每个接口类加入注解@Mapper

示例:

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

5.3 常见问题

5.3.1 表的列名为java的关键字或者列名不符合json反序列化规则

如果是java关键字:

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

  1. 首先肯定是要将属性名改为正常属性名
    • 这里是序列化时改变映射,由于本项目不涉及序列化,所以暂时不用在意,不加也行
      • 后面可能会将数据库导出表格文件可能会用到,敬请期待~

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

  1. 改变接口实现的xml的部分代码(resultmap的列名属性映射关系)

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

其他地方同理~

如果是列名不符合json反序列化规则:

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

  • 俺也不知道为啥不行,后续发现的,反正这种sb命名方式估计只有这些老毕登会想的出来,反正列名正常就不会出现这些问题!
  1. 修改属性名

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

  1. 修改配置(同理,省略~)

6. 编写后端代码

6.1 xml

动态插入方法已自动生成

  • 由于我们插入的是集合,可以用动态sql构造一整条语句,我这里不这样,感兴趣可以试试
    • 可以参考博客:【JavaEE】懒人的福音-MyBatis框架—复杂的操作-动态SQL_s:103的博客-CSDN博客
    • 这边我想插入的时候知道对应哪条数据不符合要求,我就不一次性写再一个sql语句了

示例:

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

6.2 dao

方法已声明

示例:

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

6.3 service

接口声明:

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

6.4 service.impl

接口实现:

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

@Service
@Slf4j
public class CourseServiceImpl implements ICourseService {
    @Resource
    private CourseMapper courseMapper;


    @Override
    public void insert(List<Course> list) {
        for (int i = 0; i < list.size(); i++) {
            try {
                courseMapper.insertSelective(list.get(i));
            }catch (RuntimeException e) {
                System.out.println("-----------------------------------------");
                log.error(i + "插入失败");
                System.out.println("-----------------------------------------");
            }
        }
        log.info("插入完毕");
    }
}

补充:

在service层进行一些自定义的约束,减少数据库负担,我想这也是mysql忽略check语句的初心!

测试代码我就不写了,没啥问题,如果你要写一定记得加@Transactional,防止测试代码对数据库的污染

6.5 controller

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

@Api(tags = "课程相关接口")
@Slf4j
@RestController
@RequestMapping("/course")
public class CourseController {

    @Resource
    private ICourseService courseService;
    @Resource
    private ObjectMapper objectMapper;

    @PostMapping("/insert")
    @ApiOperation("插入课程表格")
    public void insert(@NonNull @RequestParam("path") @ApiParam("表格路径") String path) throws JsonProcessingException {
        String json = ExcelUtils.xlsxTransferJson(path);
        List<Course> list = objectMapper.readValue(json, new TypeReference<List<Course>>() {});
        courseService.insert(list);
    }
}

那些api是啥,随后讲解

7. 前端页面(接口测试swagger)

这里你只需要在static写前端代码,可以用按钮触发事件啥的…

这里我偷懒,用接口测试的swagger页面

7.1 依赖

<!-- API⽂档⽣成,基于swagger2 -->
<dependency>
   <groupId>io.springfox</groupId>
   <artifactId>springfox-boot-starter</artifactId>
   <version>3.0.0</version>
</dependency>
<!-- SpringBoot健康监控 -->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

7.2 配置类

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

需要自定义的点:

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

package com.example.demo.config;

import org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointProperties;
import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
import org.springframework.boot.actuate.autoconfigure.web.server.ManagementPortType;
import org.springframework.boot.actuate.endpoint.ExposableEndpoint;
import org.springframework.boot.actuate.endpoint.web.*;
import org.springframework.boot.actuate.endpoint.web.annotation.ControllerEndpointsSupplier;
import org.springframework.boot.actuate.endpoint.web.annotation.ServletEndpointsSupplier;
import org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.util.StringUtils;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;


// 配置类
@Configuration
// 开启Springfox-Swagger
@EnableOpenApi
public class SwaggerConfig {

        /**
         * Springfox-Swagger基本配置
         * @return
         */
        @Bean
        public Docket createApi() {
                Docket docket = new Docket(DocumentationType.OAS_30)
                        .apiInfo(apiInfo())
                        .select()
                        .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller"))//一定要设置对的controller包路径
                        .paths(PathSelectors.any())
                        .build();
                return docket;

        }

        // 配置API基本信息
        private ApiInfo apiInfo() {
                ApiInfo apiInfo = new ApiInfoBuilder()
                        .title("转换器")
                        .description("转换器API测试")
                        .contact(new Contact("马大帅", "https://blog.csdn.net/Carefree_State?type=blog", "2040484356@qq.com"))
                        .version("1.0")
                        .build();
                return apiInfo;
        }

        /**
         * 解决SpringBoot 6.0以上与Swagger 3.0.0 不兼容的问题
         * 复制即可
         **/
        @Bean
        public WebMvcEndpointHandlerMapping webEndpointServletHandlerMapping(WebEndpointsSupplier webEndpointsSupplier,
                                                                             ServletEndpointsSupplier servletEndpointsSupplier,
                                                                             ControllerEndpointsSupplier controllerEndpointsSupplier,
                                                                             EndpointMediaTypes endpointMediaTypes, CorsEndpointProperties corsProperties,
                                                                             WebEndpointProperties webEndpointProperties, Environment environment) {
                List<ExposableEndpoint<?>> allEndpoints = new ArrayList();
                Collection<ExposableWebEndpoint> webEndpoints = webEndpointsSupplier.getEndpoints();
                allEndpoints.addAll(webEndpoints);
                allEndpoints.addAll(servletEndpointsSupplier.getEndpoints());
                allEndpoints.addAll(controllerEndpointsSupplier.getEndpoints());
                String basePath = webEndpointProperties.getBasePath();
                EndpointMapping endpointMapping = new EndpointMapping(basePath);
                boolean shouldRegisterLinksMapping = this.shouldRegisterLinksMapping(webEndpointProperties, environment,
                        basePath);
                return new WebMvcEndpointHandlerMapping(endpointMapping, webEndpoints, endpointMediaTypes,
                        corsProperties.toCorsConfiguration(), new EndpointLinksResolver(allEndpoints, basePath),
                        shouldRegisterLinksMapping, null);
        }

        private boolean shouldRegisterLinksMapping(WebEndpointProperties webEndpointProperties, Environment environment,
                                                   String basePath) {
                return webEndpointProperties.getDiscovery().isEnabled() && (StringUtils.hasText(basePath)
                        || ManagementPortType.get(environment).equals(ManagementPortType.DIFFERENT));
        }

}

7.3 使用

在controller层的接口里:

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

7.4 访问,展示与使用

http://127.0.0.1:8080/swagger-ui/index.html#/

访问链接格式:ip:port/swagger-ui/index.html#/

  • 是不是很神奇!
  • 底层的技术就不需要知道

展示:

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

点击一级分类显示接口:

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

使用(示例):

  • 如果表与表之间有联系,注意导入表的顺序!

点击接口

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

try it out

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

这样就ok了

数据库检查:

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口,JavaEE,MySQL,数据库,mysql,spring boot,swagger,mybatis

我们的开发就结束啦~


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

  • 后续可能会出导出表格文件的教程,敬请期待!

代码:memory · 游离态/马拉圈2023年10月 - 码云 - 开源中国 (gitee.com)文章来源地址https://www.toymoban.com/news/detail-734344.html


到了这里,关于【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 纯前端实现文件预览(pdf、docx 、xlsx)详细过程

    我详细这个当这个需求来的时候,有很大一部分人跟我的想法是一样的纯前端如何去实现多文件预览。确实这个功能很让人头疼,虽然市面上也有很多成型的插件,但是极少数能满足不同文件的预览,要么就是用第三方的链接去预览。这种虽然是最简单的方式。但是好多公司

    2024年02月14日
    浏览(28)
  • vue+xlsx实现前端模版下载、导入和导出excel文件

    产品需求:后端不想写下载,导入和导出的接口,让我们前端自己实现。 这里我们就可以用xlsx插件来实现,我们不多说了,先放一下实现的图片,下面我们分别把模版下载、导入和导出的代码放上来,想用的话,直接复制粘贴即可! 模版下载图片 导出图片: 好了,下面我

    2024年02月13日
    浏览(37)
  • 如何用matlab实现矩阵与mat格式、xlsx格式文件互转

    目录 一、前言 二、.mat格式 三、.xlsx格式 四、出现load(‘file.mat’) 数据变成struct结构体的问题 当我们利用matlab去处理我们的实验数据时,常常需要读取mat格式、xlsx格式文件,而且有时候我们又将利用Python去做后续工作,这时候我们就迫切需要了解矩阵与mat格式、xlsx格式

    2024年01月18日
    浏览(37)
  • Springboot + MySQL + html 实现文件的上传、存储、下载、删除

    实现步骤及效果呈现如下: 1.创建数据库表: 表名:file_test 存储后的数据: 2.创建数据库表对应映射的实体类: import com.baomidou.mybatisplus.annotation.IdType ; import com.baomidou.mybatisplus.annotation. TableField ; import com.baomidou.mybatisplus.annotation. TableId ; import com.baomidou.mybatisplus.annotation. Tab

    2024年04月29日
    浏览(29)
  • springboot如何访问resource目录下的文件,访问不到资源处理方法:class path resource [template.xlsx] cannot be resolved to UR

    class path resource [template.xlsx] cannot be resolved to UR ClassPathResource 可以直接访问到资源文件夹reource,但是为什么提示找不到资源呢,首先我先放出我得代码 示例代码 访问不到资源处理方法: 报错:class path resource [template.xlsx] cannot be resolved to UR 于是我检查target文件是否存在编译后

    2024年02月09日
    浏览(34)
  • 前端基于XLSX实现数据导出到Excel表格,以及提示“文件已经被损坏,无法打开”的解决方法

    一、vue实现导出excel 1、前端实现 xlsx是一个用于读取、解析和写入Excel文件的JavaScript库。它提供了一系列的API来处理Excel文件。使用该库,你可以将数据转换为Excel文件并下载到本地。这种方法适用于在前端直接生成Excel文件的场景。 更多介绍可参见官网 1、安装xlsx依赖 2、引

    2024年01月23日
    浏览(52)
  • Python实现将pdf,docx,xls,doc,wps,zip,xlsx,ofd链接下载并将文件保存到本地

    前言 本文是该专栏的第31篇,后面会持续分享python的各种干货知识,值得关注。 在工作上,尤其是在处理爬虫项目中,会遇到这样的需求。访问某个网页或者在采集某个页面的时候,正文部分含有docx,或pdf,或xls,或doc,或wps,或ofd,或xlsx,或zip等链接。需要你使用python自

    2024年02月17日
    浏览(47)
  • 前端vue3实现本地及在线文件预览(含pdf/txt/mp3/mp4/docx/xlsx/pptx)

    (一)微软office免费预览( 推荐 ) 支持doc/docx/xls/xlsx/ppt/pptx等多种office文件格式的免费预览 (二)XDOC文档预览云服务  移动端和PC端无插件预览PDF、OFD、Word、WPS等多种格式文档 本地或内网预览需要借助插件实现,pdf、mp3、mp4等主要靠原生标签或浏览器自带功能,尽量减少

    2024年02月05日
    浏览(55)
  • 全面了解Java连接MySQL的基础知识,快速实现数据交互

    当今互联网时代,大量的应用程序都需要使用MySQL数据库来存储和处理数据。Java作为一种广泛使用的编程语言之一,在开发Web应用程序时经常需要连接MySQL数据库进行数据操作。 因此,了解如何使用Java连接MySQL数据库是非常重要的。在本文中,我们将介绍Java JDBC API以及如何使

    2024年02月06日
    浏览(31)
  • 前端常用的上传下载文件的几种方式,直接上传、下载文件,读取.xlsx文件数据,导出.xlsx数据

    1.1根据文件流Blob进行下载 1.2根据下载文件链接直接进行下载 html

    2024年02月12日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包