开发辅助工具(数据库文档自动生成等)
feiyu02
3 天以前 31eb2e1559b88a3e08262301ac7dc34891c0e189
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package cn.flight.feather.database
 
import cn.smallbun.screw.core.Configuration
import cn.smallbun.screw.core.engine.EngineConfig
import cn.smallbun.screw.core.engine.EngineFileType
import cn.smallbun.screw.core.engine.EngineTemplateType
import cn.smallbun.screw.core.execute.DocumentationExecute
import cn.smallbun.screw.core.process.ProcessConfig
import com.zaxxer.hikari.HikariConfig
import com.zaxxer.hikari.HikariDataSource
import javax.sql.DataSource
 
 
/**
 * 导出数据库表结构至文档中
 * @date 2025/8/5
 * @author feiyu02
 */
object ExportDBToFile {
 
    fun connectDB(url: String, username: String, password: String): HikariDataSource {
        // 配置Hikari连接池
        val hikariConfig = HikariConfig()
        try {
            Class.forName("com.mysql.cj.jdbc.Driver") // 显式加载数据库驱动类
        } catch (e: ClassNotFoundException) {
            e.printStackTrace()
            throw RuntimeException("数据库驱动类加载失败,请确保驱动包已正确添加到项目中", e)
        }
        hikariConfig.driverClassName = "com.mysql.cj.jdbc.Driver"
        hikariConfig.jdbcUrl = url
        hikariConfig.username = username
        hikariConfig.password = password
 
        // 设置可以获取tables remarks信息
        hikariConfig.addDataSourceProperty("useInformationSchema", "true")
        hikariConfig.minimumIdle = 2
        hikariConfig.maximumPoolSize = 5
        return HikariDataSource(hikariConfig)
    }
 
    fun genConfig(
        dataSource: DataSource,
        fileName: String = "数据库结构说明文档",
        version: String = "1.0.0",
        outputDir:String = "C:/Users/feiyu02/Downloads"
    ): Configuration {
 
        // 配置生成文件相关参数
        val engineConfig = EngineConfig.builder()
            // 生成文件路径
            .fileOutputDir(outputDir)
            // 打开目录
            .openOutputDir(false)
            // 文件类型
            .fileType(EngineFileType.WORD)
            // 生成模板实现
            .produceType(EngineTemplateType.freemarker).build()
 
 
        // 忽略表前缀
//        val ignoreTablePrefix: List<String> = mutableListOf("gen_", "old_", "t_")
        val ignoreTablePrefix: List<String> = emptyList()
 
 
        // 配置处理表的参数
        val processConfig = ProcessConfig.builder().ignoreTablePrefix(ignoreTablePrefix).build()
 
 
        // 配置生成文档的详细信息
        return Configuration.builder().version(version).description(fileName).dataSource(dataSource)
            .engineConfig(engineConfig).produceConfig(processConfig).build()
    }
 
    fun execute(dataSource: DataSource, config:Configuration) {
        // 执行生成文档操作
        DocumentationExecute(config).execute();
    }
}