介绍
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";//设置背景色
}
}
)
}
运行项目,就可以在前端页面看到数据库文档了。
前端页面
点击表名可以跳转对应表查看表字段