Grails 自动生成数据字典 markdown文件

106 篇文章 0 订阅
102 篇文章 2 订阅
package middol.base

import grails.gorm.transactions.Transactional
import middol.constants.i18n.CommonConstants
import middol.result.ResultUtils
import middol.utils.DataBaseService

@Transactional
class DocService {
    DataBaseService dataBaseService
    /**
     * 获取数据字典
     */
    def getDataDic() {

        String dicSqlStr = """
            SELECT
                C.TABLE_SCHEMA AS TABLE_SCHEMA,
                T.TABLE_NAME AS TABLE_NAME,
                T.TABLE_COMMENT AS TABLE_COMMENT,
                C.COLUMN_NAME AS COLUMN_NAME,
                C.COLUMN_COMMENT AS COLUMN_COMMENT,
                C.ORDINAL_POSITION AS ORDINAL_POSITION,
                C.COLUMN_DEFAULT AS COLUMN_DEFAULT,
                C.IS_NULLABLE AS IS_NULLABLE,
                C.DATA_TYPE AS DATA_TYPE,
                C.CHARACTER_MAXIMUM_LENGTH AS CHARACTER_MAXIMUM_LENGTH,
                C.NUMERIC_PRECISION AS NUMERIC_PRECISION,
                C.NUMERIC_SCALE AS NUMERIC_SCALE,
                C.COLUMN_TYPE AS COLUMN_TYPE,
                C.COLUMN_KEY COLUMN_KEY,
                C.EXTRA AS EXTRA
            FROM
                information_schema.`TABLES` T
            LEFT JOIN information_schema.`COLUMNS` C ON T.TABLE_NAME = C.TABLE_NAME
            AND T.TABLE_SCHEMA = C.TABLE_SCHEMA
            WHERE
                T.TABLE_SCHEMA = 'app' 
            ORDER BY
                C.TABLE_NAME,
                C.ORDINAL_POSITION;
        """

        def result = dataBaseService.queryForList(dicSqlStr)
        String fileName = "数据字典.md"
        def tableNameList = result.collect {
            [
                    TABLE_NAME: it.TABLE_NAME,
                    TABLE_COMMENT: it.TABLE_COMMENT
            ]
        }.unique()
        File dicFile = new File(fileName)
        dicFile.withPrintWriter { printWriter ->
            tableNameList.each { table ->
                printWriter.println("## 【表】 ${table.TABLE_COMMENT} ${table.TABLE_NAME}")
                printWriter.println("| 列名 | 列注释 | 列的排序 | 默认值 | 是否为空 | 数据类型 | 字符最大长度 | 数值精度(最大位数) | 小数精度 | KEY |")
                printWriter.println("| --- | ----- | --------| ----- | ------ | ------ | ---------- | --------------- | ------ | --- |")
                result.findAll {
                    it.TABLE_NAME == table.TABLE_NAME
                }.each { item ->
                    int index = CommonConstants.COMMON_COLUMN.indexOf(item.COLUMN_NAME)
                    if(index > -1){
                        item.COLUMN_COMMENT = CommonConstants.COMMON_COLUMN_DESC[index]
                    }
                    printWriter.println("| ${item.COLUMN_NAME ?: ''} | ${item.COLUMN_COMMENT ?: ''} | ${item.ORDINAL_POSITION ?: ''} | ${item.COLUMN_DEFAULT ?: ''} | ${item.IS_NULLABLE ?: ''} | ${item.DATA_TYPE ?: ''} | ${item.CHARACTER_MAXIMUM_LENGTH ?: ''} | ${item.NUMERIC_PRECISION ?: ''} | ${item.NUMERIC_SCALE ?: ''} | ${item.COLUMN_KEY ?: ''} | ${item.EXTRA ?: ''} |".toString())
                }
            }

        }
        return dicFile
    }
}
package middol.base


import grails.rest.*
import grails.converters.*

class DocController {
	static responseFormats = ['json', 'xml']
    DocService docService

    /**
     * 获取数据字典
     * @return
     */
    def getDataDic() {
        File file = docService.getDataDic()
        response.setContentType("application/octet-stream")
        response.setHeader("Content-disposition", "attachment;filename=${new String(file.getName().getBytes(), 'iso-8859-1')}")
        response.outputStream << file.newInputStream()
    }
}

注意实体类标准代码:

package middol.bmwchange

import domain.base.BaseDomain
import gorm.logical.delete.LogicalDelete

/**
* @desc 国贸部门反馈影响及报价
* @author John-W
* @date 2019-11-08 17:41:01
*/
class TradeOffer implements BaseDomain<TradeOffer>, LogicalDelete<TradeOffer> {

    String changePlan               // 更改方案
    String changePlanFile           // 更改方案附件
    String notMe                    // 与我无瓜
    Double money                    // 费用(万元)
    Integer changeCycle             // 更改周期
    Long   changeMasterId           // 变更主表ID

    static constraints = {
    }

    static mapping = {
        comment("国贸部门反馈影响及报价")
        changePlan                  comment: "更改方案"
        changePlanFile              comment: "更改方案附件"
        notMe                       comment: "与我无瓜"
        money                       comment: "费用(万元)"
        changeCycle                 comment: "更改周期"
        changeMasterId              comment: "变更主表ID"
    }
}

效果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值