mysql,oracle导出数据字典excel文件

先上效果图:

汇总sheet页

 点击图中标注的表英文名,可跳转对应表详情的sheet页。

表详情的sheet页

 点击返回首页,返回汇总sheet页。

核心代码就4个SQL

mapper.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.dictionaries.mapper.DictionariesMapper">

    <select id="getTableInfoListMySQL" resultType="com.example.demo.dictionaries.entity.XSSTableInfo">
        select lower(TABLE_NAME) as tableName, TABLE_COMMENT as tableComment
        from information_schema.`TABLES` b
        where b.TABLE_SCHEMA = (select database())
        order by b.TABLE_NAME asc
    </select>

    <select id="getTableColumnListMySQL" resultType="com.example.demo.dictionaries.entity.XSSTableColumnInfo">
        select lower(COLUMN_NAME)                                  as columnName,
               COLUMN_COMMENT                                      as columnComment,
               COLUMN_TYPE                                         as columnType,
               (CASE WHEN IS_NULLABLE = 'NO' THEN '是' ELSE '' END) as required,
               COLUMN_KEY                                          as columnKey
        from information_schema.`COLUMNS`
        where TABLE_SCHEMA = (select database())
          and TABLE_NAME = #{tableName}
        order by ORDINAL_POSITION asc
    </select>

    <select id="getTableInfoListOracle" resultType="com.example.demo.dictionaries.entity.XSSTableInfo">
        select a.TABLE_NAME as tableName,
               b.COMMENTS   as tableComment
        from user_tables a
                 LEFT JOIN user_tab_comments b ON a.TABLE_NAME = b.TABLE_NAME
        ORDER BY a.TABLE_NAME ASC
    </select>

    <select id="getTableColumnListOracle" resultType="com.example.demo.dictionaries.entity.XSSTableColumnInfo">
        select s.COLUMN_NAME AS                columnName,
               s.COMMENTS    AS                columnComment,
               s.DATA_TYPE   AS                columnType,
               s.REQUIRED    AS                required,
               listagg(s.CONSTRAINT_TYPE, ',') within group(order by s.CONSTRAINT_TYPE desc) as columnKey
        FROM (
            select
            a.COLUMN_NAME,
            d.COMMENTS,
            a.DATA_TYPE||'('||a.DATA_LENGTH||')' AS DATA_TYPE,
            (CASE WHEN a.NULLABLE = 'N' THEN '是' ELSE '' END ) AS REQUIRED,
            c.CONSTRAINT_TYPE
            from USER_TAB_COLS a
            LEFT JOIN user_cons_columns b ON a.COLUMN_NAME = b.COLUMN_NAME AND a.TABLE_NAME=b.TABLE_NAME
            LEFT JOIN user_constraints c ON b.CONSTRAINT_NAME = c.CONSTRAINT_NAME
            LEFT JOIN USER_COL_COMMENTS d ON d.COLUMN_NAME = a.COLUMN_NAME AND a.TABLE_NAME=d.TABLE_NAME
            WHERE a.TABLE_NAME =#{tableName}
            GROUP BY a.COLUMN_ID,
            a.COLUMN_NAME,
            d.COMMENTS,
            a.DATA_TYPE||'('||a.DATA_LENGTH||')',
            (CASE WHEN a.NULLABLE = 'N' THEN '是' ELSE '' END ),
            c.CONSTRAINT_TYPE
            ORDER BY a.COLUMN_ID
            ) s
        GROUP BY
            s.COLUMN_NAME,
            s.COMMENTS,
            s.DATA_TYPE,
            s.REQUIRED
    </select>

</mapper>

操作excel提供一些公共函数,其他的应该很容易的,不懂就问


    /**
     * 设置超链接
     * @param cell 单元格
     * @param address 地址
     * @param type 地址类型
     */
    public void setCellLink(XSSFCell cell, String address, HyperlinkType type) {
        XSSFHyperlink link = cell.getSheet().getWorkbook().getCreationHelper().createHyperlink(type);
        link.setAddress(address);
        cell.setHyperlink(link);
    }

    /**
     * 设置超链接
     * @param cell 单元格
     * @param sheetName sheet名称
     */
    public void setCellLinkSheet(XSSFCell cell, String sheetName) {
        setCellLink(cell,"'"+sheetName+"'!A1",HyperlinkType.DOCUMENT);
    }
    /**
     * 设置超链接
     * @param cell 单元格
     * @param sheetName sheet名称
     * @param position 类型 A3 或者 H5
     */
    public void setCellLinkSheet(XSSFCell cell, String sheetName,String position) {
        setCellLink(cell,"#"+sheetName+"!"+position,HyperlinkType.DOCUMENT);
    }


    /**
     * 获取单元格,没有就创建
     * @param sheet sheet 页面
     * @param x  横
     * @param y  竖
     * @return
     */
    public XSSFCell getCell(XSSFSheet sheet, int x, int y){
        XSSFRow row = sheet.getRow(y);
        if(row==null)row=sheet.createRow(y);
        XSSFCell cell = row.getCell(x);
        if(cell==null)cell=row.createCell(x);
        return cell;
    }

    /**
     * 为了避免代码冗余,提供同时设置样式和内容的方法
     */
    public void setCellValueAndStyle(XSSFCell cell,String value,XSSFCellStyle style){
        cell.setCellValue(value);
        cell.setCellStyle(style);
    }


    /**
     * 设置合并单元格的样式
     */
    public void setRangeCellStyle(XSSFSheet sheet,CellRangeAddress range , XSSFCellStyle style){
        setRangeCellStyle(sheet,style,range.getFirstRow(),range.getLastRow(),range.getFirstColumn(),range.getLastColumn());
    }
    /**
     * 设置指定区域的单元格样式
     */
    public void setRangeCellStyle(XSSFSheet sheet, XSSFCellStyle style,int firstRow,int lastRow,int  firstColumn, int lastColumn ){
        for(int i=firstRow;i<=lastRow;i++){
            for(int j=firstColumn;j<=lastColumn;j++){
                getCell(sheet,j,i).setCellStyle(style);
            }

        }
    }

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值