Liquibase逆向生成Changelog.xml

利用liquibase逆向生成表结构,索引,主键,约束,序列以及视图等

Liquibase 项目主要目录结构
项目结构
1,首先数据库已经存在表(各种数据库都行,mysql,oracle)
例:oracle数据库

CREATE TABLE."ACT_EVT_LOG" ( "PROC_DEF_ID_" NVARCHAR2(64), "PROC_INST_ID_" NVARCHAR2(64), "EXECUTION_ID_" NVARCHAR2(64), "TASK_ID_" NVARCHAR2(64), "TIME_STAMP_" TIMESTAMP (6), "USER_ID_" NVARCHAR2(255), "DATA_" BLOB, "LOCK_OWNER_" NVARCHAR2(255), "LOCK_TIME_" TIMESTAMP (6), "IS_PROCESSED_" NUMBER(3,0) DEFAULT 0, "LOG_NR_" NUMBER(19,0), "TYPE_" NVARCHAR2(64) )

2,配置Pom.xml(数据库那块自己写自己的哈,记得改一改,改完之后可以测试连接一下)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
    </parent>

    <groupId>org.example</groupId>
    <artifactId>OracleToLiquibase</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <jdbc.driver>oracle.jdbc.driver.OracleDriver</jdbc.driver>
        <jdbc.url>jdbc:oracle:thin:@localhost:1521/orcl</jdbc.url>
        <jdbc.username>root</jdbc.username>
        <jdbc.password>123456</jdbc.password>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.liquibase</groupId>
                <artifactId>liquibase-maven-plugin</artifactId>
                <version>3.5.3</version>
                <configuration>
                    <!--指定执行主文件 -->
                    <changeLogFile>${basedir}/src/main/resources/conf/liquibase/master_changelog.xml</changeLogFile>
                    <diffChangeLogFile>${basedir}/src/main/resources/conf/liquibase/changelog/${maven.build.timestamp}_changelog.xml</diffChangeLogFile>
                    <outputChangeLogFile>${basedir}/src/main/resources/conf/liquibase/changelog/expsChangelog.xml</outputChangeLogFile>

                    <driver>oracle.jdbc.driver.OracleDriver</driver>
                    <url>jdbc:oracle:thin:@localhost:1521/orcl</url>
                    <username>HUAxia</username>
                    <password>123456</password>

                    <dropFirst>false</dropFirst>
                    <defaultSchemaName />
                    <referenceUrl>hibernate:spring:com.jaguar.myapp.domain?dialect=&amp;hibernate.ejb.naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringNamingStrategy</referenceUrl>
                    <verbose>true</verbose>
                    <logging>debug</logging>

                    <!-- 是否需要弹出确认框 -->
                    <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
                    <!--输出文件的编码 -->
                    <outputFileEncoding>UTF-8</outputFileEncoding>
                    <!--执行的时候是否显示详细的参数信息 -->
                    <verbose>true</verbose>
                    <!--是否每次都重新加载properties -->
                    <propertyFileWillOverride>true</propertyFileWillOverride>
                    <rollbackTag>${project.version}</rollbackTag>
                    <tag>${project.version}</tag>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>cn.easyproject</groupId>
            <artifactId>ojdbc7</artifactId>
            <version>12.1.0.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-core</artifactId>
            <version>3.6.3</version>
        </dependency>
        <dependency>
            <groupId>io.r2dbc</groupId>
            <artifactId>r2dbc-spi</artifactId>
            <version>0.9.0.M1</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.29</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
</project>

3,创建空changelog_original.xml(按照目录结构创建,下同)

<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd">
    <!-- mvn liquibase:update -->
    <include file="conf/liquibase/changelog/00000000000000_initial_common.xml" relativeToChangelogFile="false"/>
</databaseChangeLog>

4,执行 mvn liquibase:generateChangeLog
在这里插入图片描述
注意:如果mvn 不能使用可能是环境变量有问题
问题参考:Maven环境变量设置

5,然后查看changelog 目录下的expsChangelog.xml就可以了

<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd">
    <changeSet author="Administrator (generated)" id="1628580107803-1">
        <createTable tableName="ACT_EVT_LOG">
            <column name="PROC_DEF_ID_" type="NVARCHAR2(64)"/>
            <column name="PROC_INST_ID_" type="NVARCHAR2(64)"/>
            <column name="EXECUTION_ID_" type="NVARCHAR2(64)"/>
            <column name="TASK_ID_" type="NVARCHAR2(64)"/>
            <column name="TIME_STAMP_" type="TIMESTAMP(6)"/>
            <column name="USER_ID_" type="NVARCHAR2(255)"/>
            <column name="DATA_" type="BLOB"/>
            <column name="LOCK_OWNER_" type="NVARCHAR2(255)"/>
            <column name="LOCK_TIME_" type="TIMESTAMP(6)"/>
            <column defaultValueNumeric="0" name="IS_PROCESSED_" type="NUMBER(3, 0)"/>
            <column name="LOG_NR_" type="NUMBER(19, 0)"/>
            <column name="TYPE_" type="NVARCHAR2(64)"/>
        </createTable>
    </changeSet>
</databaseChangeLog>

6. 将新的xml的改变更新到数据库 mvn liquibase:update
,,,待续,,,

猜你喜欢

转载自blog.csdn.net/Your1221/article/details/119574805