利用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=&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
,,,待续,,,