Screw工具基本使用
- Screw基本介绍
 - Screw文档生成方式
 
Screw基本介绍
- 
Screw是一个非常简洁好用的数据库表结构文档生成工具,支持MySQL,Oracle,PostgreSQL等主流的关系数据库
 - Screw数据库表结构文档生成工具支持生成以下三种格式的文档: 
  
 
Screw文档生成方式
- Screw数据库表结构文档生成工具支持通过Java代码和Maven插件的方式生成数据库表结构文档
 
Java方式
- 在pom.xml文件中,引入screw-core依赖.同时引入HikariCP依赖和mysql-connector-java依赖来连接MySQL数据库:
 
<dependency>
    <groupId>cn.smallbun.screw</groupId>
    <artifactId>screw-core</artifactId>
    <version>1.0.5</version>
 </dependency>
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>4.0.3</version>
 </dependency>
 <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.25</version>
 </dependency>
- 文档生成类DocumentGeneration类
 
public class DocumentGeneration {
  public static void main(String[] args) {
    // 配置数据源
    HikariConfig hikariConfig = new HikariConfig();
    hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");
    hikariConfig.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/database");
    hikariConfig.setUsername("root");
    hikariConfig.setPassword("root");
    // 配置获取数据库表的备注信息
    hikariConfig.addDataSourceProperty("useInformationSchema", "true");
    hikariConfig.setMinimumIdle(2);
    hikariConfig.setMaxmumPoolSize(5);
    DataSource dataSource = new HikariDataSource(hikariConfig);
    // 配置生成方式
    EngineConfig engineConfig = EngineConfig.builder()
      // 生成文件路径
      .fileOutputDir(fileOutputDir)
      // 打开目录
      .openOutputDir(true)
      // 文件类型
      .fileType(EngineFileType.HTML)
      // 生成使用的模板
      .produceType(EngineTemplateType.freemarker)
      // 自定义文件名称
      .fileName("DataBaseDocument")
      .build();
    // 配置忽略的表
    ArrayList<String> ignoreTableName = new ArrayList<>();
    ignoreTableName.add("test_user");
    ignoreTableName.add("test_group");
    // 配置忽略指定前缀的表
    ArrayList<String> ignoreTablePrefix = new ArrayList<>();
    ignoreTablePrefix.add("test_");
    // 配置忽略指定后缀的表
    ArrayList<String> ignoreTableSuffix = new ArrayList<>();
    ignoreTableSuffix.add("_test");
    // 配置数据库表结构文档生成过程 
    ProcessConfig processConfig = ProcessConfig.build()
      /* 
       * 指定生成逻辑: 
       *  - 如果存在指定的表,指定的表前缀,指定的表后缀时.会生成指定的表,其余表不会生成并且跳过忽略表配置
       *  - 如果未指定,会生成忽略表配置的其余所有的表
       */
       // 生成指定名称的表
      .designatedTableName(new ArrayList<>())
      // 生成指定前缀的表
      .designatedTablePrefix(new ArrayList<>())
      // 生成指定后缀的表
      .designatedTableSuffix(new ArrayList<>())
      // 忽略指定名称的表
      .ignoreTableName(ignoreTableName)
      // 忽略指定前缀的表
      .ignoreTablePrefix(ignoreTablePrefix)
      // 忽略指定后缀的表
      .ignoreTableSuffix(ignoreTableSuffix)
      .build();
    // 文档生成信息配置
    Configuration config = Configuration.builder()
      // 文档版本
      .version("1.0.0")
      // 文档描述
      .description("数据库表结构文档生成")
      // 数据源
      .dataSource(dataSource)
      // 生成配置
      .engineConfig(engineConfig)
      // 执行配置
      .produceConfig(processConfig)
      .build();
    // 执行
    new DocumentationExecute(config).execute();
  }
}
Maven插件
- 在pom.xml文件中,引入Screw的Maven插件screw-maven-plugin插件:
 
<plugin>
            <groupId>cn.smallbun.screw</groupId>
            <artifactId>screw-maven-plugin</artifactId>
            <version>1.0.5</version>
            <dependencies>
                <!-- HikariCP -->
                <dependency>
                    <groupId>com.zaxxer</groupId>
                    <artifactId>HikariCP</artifactId>
                    <version>4.0.3</version>
                </dependency>
                <!--mysql driver-->
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>8.0.25</version>
                </dependency>
            </dependencies>
            <configuration>
                <!--username-->
                <username>root</username>
                <!--password-->
                <password>root</password>
                <!--driver-->
                <driverClassName>com.mysql.cj.jdbc.Driver</driverClassName>
                <!--jdbc url-->
                <jdbcUrl>jdbc:mysql://127.0.0.1:3306/database</jdbcUrl>
                <!--生成文件类型-->
                <fileType>HTML</fileType>
                <!--打开文件输出目录-->
                <openOutputDir>false</openOutputDir>
                <!--生成模板-->
                <produceType>freemarker</produceType>
                <!--文档名称 为空时:将采用[数据库名称-描述-版本号]作为文档名称-->
                <fileName>DataBaseDocument</fileName>
                <!--描述-->
                <description>数据库表结构文档生成</description>
                <!--版本-->
                <version>1.0.0</version>
                <!--标题-->
                <title>数据库表结构文档</title>
            </configuration>
            <executions>
                <execution>
                    <phase>compile</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
Screw生成Java POJO对象
- Screw支持通过MySQL数据库生成对应的Java POJO对象
 - 在pom.xml文件中,引入screw-extension依赖.同时引入HikariCP依赖和mysql-connector-java依赖来连接MySQL数据库:
 
<dependency>
    <groupId>cn.smallbun.screw</groupId>
    <artifactId>screw-extension</artifactId>
    <version>1.0.5</version>
 </dependency>
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>4.0.3</version>
 </dependency>
 <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.25</version>
 </dependency>
<dependency>
    <groupId>cn.smallbun.screw</groupId>
    <artifactId>screw-extension</artifactId>
    <version>1.0.5</version>
 </dependency>
- Java POJO对象生成类PojoGeneration类:
 
public class PojoGeneration {
  public static void main(String[] args) {
    // 配置数据源
    HikariConfig hikariConfig = new HikariConfig();
    hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");
    hikariConfig.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/database");
    hikariConfig.setUserName("root");
    hikariConfig.setPassword("root");
    // 配置获取数据库表的备注信息
    hikariConfig.addDataSourceProperty("useInformationSchema", "true");
    hikariConfig.setMinimumIdle(2);
    hikariConfig.setMaximumPoolSize(5);
    DataSource dataSource = new HakariDataSource(hikariConfig);
    // 配置数据库表结构生成过程
    ProcessConfig processConfig = ProcessConfig.builder()
      /*
       * 指定生成逻辑:
       *  - 如果存在指定表名称,指定表前缀,指定表后缀时.会生成指定表的Java POJO对象,其余表不会生成,并且跳过忽略表配置
       *  - 如果未指定,会忽略表配置的其余所有的表
       */
       // 生成指定名称的表
       .designatedTableName(new ArrayList<>())
       // 生成指定前缀的表
       .designatedTablePrefix(new ArrayList<>())
       // 生成指定后缀的表
       .designatedTableSuffix(new ArrayList<>())
       .build();
    // 配置生成的Java POJO对象
    PojoConfiguration config = new PojoConfiguration();
    // 配置生成的路径
    config.setPath("com/oxford/pojo");
    // 配置包的名称
    config.setPackageName("com.oxford.pojo");
    // 配置是否使用lombok
    config.setUseLombok(false);
    // 配置数据源
    config.setDataSource(dataSource);
    // 配置命名策略
    config.setNameStrategy(new HumpNameStrategy());
    // 配置执行的配置
    config.setProcessConfig(processConfig);
    // 执行
    new PojoExecute(config).execute();
  }
}