导出MySQL表结构到excle

2023-01-18  本文已影响0人  archerdu

因有提供表信息的需求,所有写了自动生成的代码,避免了无效的工作量。
只列出关键代码,依赖于mybatis-plus,easyexcel。
代码中是读取指定表名生成表结构,也可以改为读取所有表。

package com.jianshu.service.impl;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.jianshu.FeignApplication;
import com.jianshu.domain.Columns;
import com.jianshu.domain.Tables;
import com.jianshu.excel.ColumnCell;
import com.jianshu.excel.TableCell;
import com.jianshu.service.ColumnsService;
import com.jianshu.service.TablesService;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Slf4j
@SpringBootTest(classes = FeignApplication.class)
public class TablesServiceImplTest {

    @Resource
    private TablesService tablesService;

    @Resource
    private ColumnsService columnsService;

    @Test
    public void test() {
        String tableNameFile = "C:\\Users\\archer\\Desktop\\tables.txt";
        String fileName = "C:\\Users\\archer\\Desktop\\表结构.xlsx";
        List<String> tableNames = new ArrayList<>();

        try {
            BufferedReader fileReader = new BufferedReader(new FileReader(tableNameFile));
            String line;
            while ((line = fileReader.readLine()) != null) {
                if (!StringUtils.isEmpty(line)) {
                    tableNames.add(line);
                }
            }
        } catch (IOException e) {
            log.info(e.getMessage(), e);
        }

        List<Tables> tablesList = tablesService.list(Wrappers.<Tables>lambdaQuery().in(Tables::getTableName, tableNames));
        List<Columns> columnsList = columnsService.list(Wrappers.<Columns>lambdaQuery().in(Columns::getTableName, tableNames));
        Map<String, List<Columns>> columnsMap = columnsList.stream().collect(Collectors.<Columns, String>groupingBy(Columns::getTableName));
        log.info("size {}", tablesList.size());

        List<TableCell> tableCellList = new ArrayList<>();
        List<ColumnCell> columnCellList = new ArrayList<>();
        for (Tables tables : tablesList) {
//            log.info("name {} {} {}", tables.getTableName(), tables.getTableComment(), tables.getTableRows());
            TableCell tableCell = new TableCell();
            tableCell.setTableName(tables.getTableName());
            tableCell.setTableComment(tables.getTableComment());
            tableCell.setTableRows(tables.getTableRows());
            tableCellList.add(tableCell);

            List<Columns> tableColumns = columnsMap.get(tables.getTableName());
            for (Columns columns : tableColumns) {
//                log.info("column {} {}", columns.getColumnName(), columns.getColumnComment());
                ColumnCell columnCell = new ColumnCell();
                columnCell.setTableName(tables.getTableName());
                columnCell.setColumnName(columns.getColumnName());
                columnCell.setColumnComments(columns.getColumnComment());
                columnCellList.add(columnCell);
            }
        }


        ExcelWriter excelWriter = EasyExcel.write(fileName).build();
        WriteSheet writeSheet = EasyExcel.writerSheet(0, "表信息").head(TableCell.class).build();
        excelWriter.write(tableCellList, writeSheet);
        writeSheet = EasyExcel.writerSheet(1, "字段信息").head(ColumnCell.class).build();
        excelWriter.write(columnCellList, writeSheet);
        excelWriter.finish();
    }

}

maven依赖

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
<!-- 需要定义自己的 artifactId -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.3.1</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.0.5</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
上一篇下一篇

猜你喜欢

热点阅读