当前位置: 代码迷 >> 综合 >> Grails 自动生成数据字典 markdown文件
  详细解决方案

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

热度:10   发布时间:2024-02-27 16:09:37.0
package middol.baseimport 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 = """SELECTC.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 EXTRAFROMinformation_schema.`TABLES` TLEFT JOIN information_schema.`COLUMNS` C ON T.TABLE_NAME = C.TABLE_NAMEAND T.TABLE_SCHEMA = C.TABLE_SCHEMAWHERET.TABLE_SCHEMA = 'app' ORDER BYC.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.baseimport 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()}
}

 

  相关解决方案