diff --git a/README.md b/README.md index 1e1d8c2..d1f2301 100644 --- a/README.md +++ b/README.md @@ -2,36 +2,78 @@ Database document generator -# Features +you could use `databasir` to generate database meta model, or render it as markdown / pdf (TODO) / html (TODO) -- render as markdown -- render as html (TODO) -- render as PDF (TODO) +# How to use -# Quick Start +## Database Meta to Java Model ```java -// First: get database connection -Class.forName("com.mysql.cj.jdbc.Driver"); -Properties info=new Properties(); -info.put("user","root"); -info.put("password","123456"); -// this config is used by mysql -info.put("useInformationSchema","true"); -String url="jdbc:mysql://localhost:3306/patient?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true"; -var connection=DriverManager.getConnection(url,info); - -// Second: generate doc model -var config=DatabaseDocConfiguration.builder() - .databaseName("patient") - .connection(connection) - .build(); +java.sql.Connection connection = ...; +DatabaseDocConfig config = DatabaseDocConfig.builder() + .databaseName("Demo") + .connection(connection) + .build(); DatabaseDoc doc = JdbcDatabaseDocFactory.of().create(config).orElseThrow(); +``` -// Final: Render as markdown -try(FileOutputStream out=new FileOutputStream("doc.md")){ - MarkdownRender.of(new RenderConfiguration()).rendering(doc,out); -}catch(IOException e){ +## Render as Markdown +```java +java.sql.Connection connection = ...; +DatabaseDocConfig config = DatabaseDocConfig.builder() + .databaseName("Demo") + .connection(connection) + .build(); +DatabaseDoc doc = JdbcDatabaseDocFactory.of().create(config).orElseThrow(); +try (FileOutputStream out = new FileOutputStream("doc.md")) { + RenderConfig renderConfig = new RenderConfig(); + Render.markdownRender(renderConfig).rendering(doc, out); +} catch (IOException e) { throw new IllegalStateException(e); } -``` \ No newline at end of file +``` + +- Example + +![](README/table-doc.png) + + +## Ignore tables or columns + +support regex pattern to ignore table or column + +```java +java.sql.Connection connection = ...; +DatabaseDocConfig config = DatabaseDocConfig.builder() + .databaseName("Demo") + .connection(connection) + .ignoreTableRegexes(Arrays.asList("mysql_*")) + .ignoreColumnRegexes(Arrays.asList("id")) + .build(); +DatabaseDoc doc = JdbcDatabaseDocFactory.of().create(config).orElseThrow(); +``` + +## Extension + +Default factory + +- tableDocFactory -> `com.databasir.core.doc.factory.jdbc.JdbcTableDocFactory` +- columnDocFactory -> `com.databasir.core.doc.factory.jdbc.JdbcTableColumnDocFactory` +- indexDocFactory -> `com.databasir.core.doc.factory.jdbc.JdbcTableIndexDocFactory` +- triggerDocFactory -> `com.databasir.core.doc.factory.jdbc.JdbcTableTriggerDocFactory` + +Custom configuration +```java +java.sql.Connection connection = ...; +DatabaseDocConfig config = DatabaseDocConfig.builder() + .databaseName("Demo") + .connection(connection) + .tableDocFactory(...) // your custom table doc factory + .tableColumnDocFactory(...) // your custom column doc factory + .tableIndexDocFactory(...) // your custom index doc factory + .tableTriggerDocFactory(...) // your custom trigger doc factory + .build(); +DatabaseDoc doc = JdbcDatabaseDocFactory.of().create(config).orElseThrow(); +``` + + diff --git a/README/table-doc.png b/README/table-doc.png new file mode 100644 index 0000000..4631cbf Binary files /dev/null and b/README/table-doc.png differ diff --git a/core/src/main/java/com/databasir/core/doc/factory/DatabaseDocConfig.java b/core/src/main/java/com/databasir/core/doc/factory/DatabaseDocConfig.java index 63559d0..3afb89f 100644 --- a/core/src/main/java/com/databasir/core/doc/factory/DatabaseDocConfig.java +++ b/core/src/main/java/com/databasir/core/doc/factory/DatabaseDocConfig.java @@ -26,9 +26,6 @@ public class DatabaseDocConfig { @Builder.Default private List ignoreColumnRegexes = Collections.emptyList(); - @Builder.Default - private DatabaseDocFactory databaseDocFactory = new JdbcDatabaseDocFactory(); - @Builder.Default private TableDocFactory tableDocFactory = new JdbcTableDocFactory(); diff --git a/core/src/test/java/App.java b/core/src/test/java/App.java index f40f188..7d6b01d 100644 --- a/core/src/test/java/App.java +++ b/core/src/test/java/App.java @@ -25,14 +25,14 @@ public class App { // generate doc model var config = DatabaseDocConfig.builder() - .databaseName("patient") + .databaseName("user") .connection(connection) .tableTriggerDocFactory(new MysqlTableTriggerDocFactory()) .build(); DatabaseDoc doc = JdbcDatabaseDocFactory.of().create(config).orElseThrow(); // render as markdown - try (FileOutputStream out = new FileOutputStream("doc.md")) { + try (FileOutputStream out = new FileOutputStream("user.md")) { RenderConfig renderConfig = new RenderConfig(); renderConfig.setRenderTriggers(true); Render.markdownRender(renderConfig).rendering(doc, out);