springboot项目集成screw实例

介绍

screw是一款数据库文档生成工具,支持MySQL、MariaDB、TIDB、Oracle、SqlServer、PostgreSQL、Cache DB。支持文档生成的类型有HTML、MD5、Word

springboot项目集成screw

本实例是SqlServer数据库生成HTML类型文档,数据库、文档类型代码中可以随意切换。

导入依赖

<!-- https://mvnrepository.com/artifact/cn.smallbun.screw/screw-core -->
		<dependency>
			<groupId>cn.smallbun.screw</groupId>
			<artifactId>screw-core</artifactId>
			<version>1.0.5</version>
		</dependency>

Java代码生成文档

@RestController
@RequestMapping("screw")
public class ScrewDatabaseUtil {

    //SqlServer
    @Value(value = "${spring.datasource.driverClassName}")
    String Driver_Class_Name;
    //MySQL
    //private static final String Driver_Class_Name = "com.mysql.cj.jdbc.Driver";
    //Oracle
    //private static final String Driver_Class_Name = "oracle.jdbc.driver.OracleDriver";

    //数据库种类
    //SqlServer
    @Value(value = "${DB_TYPE}")
    String DB_TYPE;

    //SqlServer
    @Value(value = "${DB_URL}")
    String DB_URL;

    //SqlServer
    @Value(value = "${DB_NAME}")
    String DB_NAME = ";instanceName=sqlserver2012;DatabaseName=thxxhgkptReal_20210530";

    //账号名
    @Value(value = "${spring.datasource.username}")
    String DB_USERNAME;
    //密码
    @Value(value = "${spring.datasource.password}")
    String DB_PASSWORD;

    //生成数据库文档文件路径
    @Value(value = "${FILE_OUTPUT_DIR}")
    String FILE_OUTPUT_DIR;
    //自定义文件类型
    private static final EngineFileType FILE_OUTPUT_TYPE = EngineFileType.HTML;//可以设置Word或者Markdown格式
    //自定义文档名称
    @Value(value = "${DOC_FILE_NAME}")
    String DOC_FILE_NAME;
    @Value(value = "${DOC_VERSION}")
    String DOC_VERSION;//文档版本
    @Value(value = "${DOC_DESCRIPTION}")
    String DOC_DESCRIPTION;//文档描述

    String  JAVA_CLASS_PACKAGE = "com.tonghui.xxhgkpt.yyxt";

    @RequestMapping("CreatDatabaseWord")
    public void CreatDataDbWord(HttpServletRequest request, HttpServletResponse response) throws IOException {
        CreatDatabaseWord(request,response);
    }


    /* public static void main(String[] args) {
        //创建screw的配置
        Configuration config = Configuration.builder().version(DOC_VERSION)//版本
                .description(DOC_DESCRIPTION)//描述
                .dataSource(buildDataSource())//数据源
                .engineConfig(buildEngineConfig())//引擎配置
                .produceConfig(buildProcessConfig())//处理配置
                .build();
        //执行screw,生成数据库文档
        new DocumentationExecute(config).execute();
    }*/

    //目前仅支持MySQL
    /*public void creatEntity(){
        // 创建 screw 的配置
        PojoConfiguration config = PojoConfiguration.builder()
                .path(FILE_OUTPUT_DIR) // 生成 POJO 相关的目录
                .packageName(JAVA_CLASS_PACKAGE) // 包名
                .nameStrategy(new HumpNameStrategy()) // 设置命名策略
                .useLombok(true) // 是否使用 Lombok
                .dataSource(buildDataSource()) // 数据源
                .processConfig(buildProcessConfig()) // 处理配置
                .build();

        // 执行 screw,生成 POJO 实体类
        new PojoExecute(config).execute();
    }*/


    public void CreatDatabaseWord(HttpServletRequest request, HttpServletResponse response) throws IOException {
        //创建screw的配置
        Configuration config = Configuration.builder().version(DOC_VERSION)//版本
                .description(DOC_DESCRIPTION)//描述
                .dataSource(buildDataSource())//数据源
                .engineConfig(buildEngineConfig())//引擎配置
                .produceConfig(buildProcessConfig())//处理配置
                .build();
        //执行screw,生成数据库文档
        new DocumentationExecute(config).execute();

        //response.setContentType("multipart/form-data");
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html");
        String fileName = FILE_OUTPUT_DIR+ File.separator + DOC_FILE_NAME+FILE_OUTPUT_TYPE.getFileSuffix();
        response.setHeader("Content-Disposition","attachmentlfileName="+fileName);

        FileInputStream fis = new FileInputStream(new File(fileName));
        response.getOutputStream().write(toByteArray(fis));
        response.getOutputStream().flush();
        response.getOutputStream().close();
        fis.close();
        //此处fileName其实是filePath
        FileUtil.del(fileName);//删除本地存储的文件
    }

    /**
     * 创建数据源
     * @return
     */
    private DataSource buildDataSource(){
        //创建HikariConfig配置类
        HikariConfig hikariConfig = new HikariConfig();

        hikariConfig.setDriverClassName(Driver_Class_Name);

        if("SqlServer".equals(DB_TYPE)){//判断数据库类型选用不同连接方式
            hikariConfig.setJdbcUrl(DB_URL+DB_NAME);
        }else if ("MySQL".equals(DB_TYPE)){
            hikariConfig.setJdbcUrl(DB_URL+"/"+DB_NAME);
        }else if("Oracle".equals(DB_TYPE)){
            hikariConfig.setJdbcUrl(DB_URL+":"+DB_NAME);
        }

        hikariConfig.setUsername(DB_USERNAME);
        hikariConfig.setPassword(DB_PASSWORD);
        hikariConfig.addDataSourceProperty("useInformationSchema","true");//设置可以获取tables remarks信息
        hikariConfig.setMinimumIdle(2);
        hikariConfig.setMaximumPoolSize(5);
        //创建数据源,执行screw,生成数据库文档
        return new HikariDataSource(hikariConfig);
    }

    /**
     * 创建screw的引擎配置
     * @return
     */
    private EngineConfig buildEngineConfig(){
        return EngineConfig.builder()
                .fileOutputDir(FILE_OUTPUT_DIR)//生成文件路径
                .openOutputDir(false)//打开目录
                .fileType(FILE_OUTPUT_TYPE)//文件类型
                .produceType(EngineTemplateType.freemarker)//文件类型
                .fileName(DOC_FILE_NAME)//自定义文件名称
                .build();
    }

    /**
     * 配置想要生成的表+想要忽略的表
     * @return 生成表配置
     */
    private static ProcessConfig buildProcessConfig(){
        return ProcessConfig.builder()
                .designatedTableName(Collections.<String>emptyList())//根据名称指定表生成
                .designatedTablePrefix(Collections.<String>emptyList())//根据表前缀生成
                .designatedTableSuffix(Collections.<String>emptyList())//根据表后缀生成
                .ignoreTableName(Arrays.asList("test","test01"))//忽略表名
                .ignoreTablePrefix(Arrays.asList("ACT_"))//忽略表前缀
                .ignoreTableSuffix(Arrays.asList("_test","_0911","_0914","_205"))//忽略表后缀
                .build();
    }
}

配置文件

前端HTML页面代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>数据库文档</title>
    <link rel="stylesheet" href="../plugin/layui-v2.5.5/css/layui.css">
    <link rel="stylesheet" href="../plugin/font-awesome/css/font-awesome.css">

</head>
<style>
    /*防止文档渲染时有明显颜色差异*/
    body {
        background-color: #ffffff;
    }

</style>
<body>

<div >

</div>

<script src="../plugin/jquery/jquery-2.1.1.min.js"></script>
<script src="../plugin/jquery/jquery-ui.js"></script>
<script src="../plugin/jquery/jquery.cookie.js"></script>
<script src="../plugin/layui-v2.5.5/layui.all.js"></script>
<script src="../js/statics.js"></script>
<script src="js/statics.js"></script>
<script src="js/index.js"></script>
<script src="js/screw.js"></script>

</body>
</html>

js部分


$(document).ready(function () {
    showDataDb();
});

function showDataDb(){
    $.ajax({
            url:SERVICE_URL+"screw/CreatDatabaseWord",
        //url:SERVICE_URL+"monitor/getInfo",
            type:"post",
            async:true,
            //contentType:"multipart/form-data",
            success:function (result){
                document.write(result);
                document.close();
                //console.log(response)
                //let blob = new Blob([response], {type : 'text/html'});
                //let iframe = document.getElementById("iframeId");
                //iframe.src = window.URL.createObjectURL(blob);
                let body = document.body;
                body.style.backgroundColor = "#ffffff";//设置背景色
            }
        }
    )
}

运行项目,就可以在前端页面看到数据库文档了。

前端页面

点击表名可以跳转对应表查看表字段

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值