liquibase使用教程


在項目中引入liquibase過程:

1、父項目 pom.xml 中添加依賴

<dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.30</version>
        </dependency>
        <dependency>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-core</artifactId>
            <version>3.5.5</version>
        </dependency>
</dependencies>

2、添加liquibase.properties文件

#liquibase
changeLogFile=src/main/resources/liquibase/db.changelog-master.xml
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf-8
username=root
password=egova

3、父項目 pom中添加liquibase插件

<build>
        <plugins>
            <plugin>
                <groupId>org.liquibase</groupId>
                <artifactId>liquibase-maven-plugin</artifactId>
                <version>3.5.1</version>                
                <configuration>
                <!--properties文件路徑,該文件記錄了數據庫連接信息等-->
                <propertyFile>src/main/resources/liquibase.properties</propertyFile>
                    <propertyFileWillOverride>true</propertyFileWillOverride>
                    <!--生成文件的路徑-->
                    <outputChangeLogFile>src/main/resources/liquibase/changelog_dev.xml</outputChangeLogFile>      
                    <!-- <driver>com.mysql.jdbc.Driver</driver>
                    <url>jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf-8</url>                    
                    <username>root</username>
                    <password>egova</password>-->
                </configuration>
            </plugin>
        </plugins>
 </build>

4、新建changelog主文件入口: db.changelog-master.xml

<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
                      http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">

    <include file="src/main/resources/liquibase/changelog_dev.xml"/>
   <!-- <include file="com/example/db/changelog/db.changelog-1.1.xml"/>
    <include file="com/example/db/changelog/db.changelog-2.0.xml"/>-->
</databaseChangeLog> 

5、打開maven命令框:可以選擇模塊

 6、生成changelog

liquibase:generateChangeLog

   (1) 對當前數據庫狀態生成 changlog:

   mvn liquibase:generateChangeLog


   (2)只對數據生成 changelog ,(先用別的方式往數據庫創建數據后再用此方式生成changelog)
   mvn liquibase:generateChangeLog -Dliquibase.diffTypes=data
   區別:前者是在changelog中追加表創建語句,生成建表語句和數據插入語句,如果表語句已存在,則只生成建表語句:如圖

  

<?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="zhaoyanhao" id="1565662890214-1" objectQuotingStrategy="QUOTE_ALL_OBJECTS">
        <createTable tableName="test1">
            <column name="id" type="BIGINT">
                <constraints nullable="false"/>
            </column>
            <column name="name" type="VARCHAR(15)">
                <constraints nullable="false"/>
            </column>
            <column name="email" type="VARCHAR(100)">
                <constraints nullable="false"/>
            </column>
            <column name="password" type="VARCHAR(8)">
                <constraints nullable="false"/>
            </column>
            <column name="phone" type="VARCHAR(50)">
                <constraints nullable="false"/>
            </column>
            <column name="address" type="VARCHAR(255)">
                <constraints nullable="false"/>
            </column>
            <column name="description" type="LONGTEXT"/>
            <column defaultValueComputed="CURRENT_TIMESTAMP" name="create_time" type="TIMESTAMP">
                <constraints nullable="false"/>
            </column>
        </createTable>
    </changeSet>
    <changeSet author="zhaoyanhao" id="1565662890214-2" objectQuotingStrategy="QUOTE_ALL_OBJECTS">
        <addPrimaryKey columnNames="id" constraintName="PRIMARY" tableName="test1"/>
    </changeSet>
    <changeSet author="zhaoyanhao" id="1565662890214-3" objectQuotingStrategy="QUOTE_ALL_OBJECTS">
        <createTable tableName="test2">
            <column name="id" type="BIGINT">
                <constraints nullable="false"/>
            </column>
            <column name="name" type="VARCHAR(15)">
                <constraints nullable="false"/>
            </column>          
            <column name="password" type="VARCHAR(8)">
                <constraints nullable="false"/>
            </column>
            <column name="phone" type="VARCHAR(50)">
                <constraints nullable="false"/>
            </column>
            <column name="address" type="VARCHAR(255)">
                <constraints nullable="false"/>
            </column>
            <column name="description" type="LONGTEXT"/>
            <column defaultValueComputed="CURRENT_TIMESTAMP" name="create_time" type="TIMESTAMP">
                <constraints nullable="false"/>
            </column>
        </createTable>
    </changeSet>
    <changeSet author="zhaoyanhao" id="1565662890214-4" objectQuotingStrategy="QUOTE_ALL_OBJECTS">
        <addPrimaryKey columnNames="id" constraintName="PRIMARY" tableName="test2"/>
    </changeSet>
</databaseChangeLog>
View Code

 

7、執行changelog,寫入數據庫

在changeset中添加createTable語句,執行liquibase,使用命令: 

liquibase:update  將changelog變化的內容寫入數據庫

liquibase:updateSQL  檢查changelog語法的合法性

8、在項目中使用liquibase

@Bean
public SpringLiquibase liquibase(DataSource dataSource, LiquibaseProperties liquibaseProperties) {
 
        SpringLiquibase liquibase = new SpringLiquibase(taskExecutor, env);
        liquibase.setDataSource(dataSource);
        //制定changelog的位置,這里使用的一個master文件引用其他文件的方式
        liquibase.setChangeLog("classpath:config/liquibase/db.changelog-master.xml");
        liquibase.setContexts(liquibaseProperties.getContexts());
        liquibase.setDefaultSchema(liquibaseProperties.getDefaultSchema());
        liquibase.setDropFirst(liquibaseProperties.isDropFirst());
        return liquibase;
}

 

 

 

第三方調用liquibase可以參考:https://blog.csdn.net/weixin_34087307/article/details/91397914

 liquibase命令大全

 

命令名稱 命令描述
update 更新數據庫到當前版本
updateSQL 寫入SQL將數據庫更新到currentversion或STDOUT
updateCount <num> 將下一個NUM更改應用到數據庫
updateCountSQL <num> 寫入SQL以將下一個NUM更改應用到數據庫
updateToTag <tag> 使用指定的標記將數據庫更新到變更集
updateToTagSQL <tag> 使用指定的標記將SQL寫入(到標准輸出)到更改集
rollback <tag> 將數據庫回滾到指定標簽的狀態is was
rollbackSQL <tag> 生成數據庫回滾到指定標簽的sql
rollbackToDate <date/time> 將數據庫回滾到給定日期/時間的狀態is was。日期格式:yyyy-MM-dd 'HH: mm: ss
rollbackToDateSQL <date/time> 寫入SQL以將數據庫回滾到給定日期/時間版本的狀態到STDOUT
rollbackCount <value> 回滾應用於數據庫的最后一個<值>更改集
rollbackCountSQL <value> 寫入SQL以回滾最后一個<值>更改集到應用於數據庫的stdoutapply
futureRollbackSQL 寫入SQL,以便在更改日志中的更改完成后將數據庫回滾到當前狀態
futureRollbackSQL <value> 在更改日志中的<值>更改完成后,寫入SQL以將數據庫回滾到當前狀態
futureRollbackFromTagSQL <tag> 寫入(到標准輸出)SQL,以便在更改后將數據庫回滾到其當前狀態
updateTestingRollback 更新數據庫,然后再次回滾更改。用於測試回滾支持
generateChangeLog 寫入更改日志XML以將數據庫的當前狀態復制到標准輸出
snapshot 將數據庫的當前狀態寫入標准輸出
snapshotReference 將referenceUrl數據庫的當前狀態寫入標准輸出
Diff Commands 數據庫對比命令
diff [diff parameters] 數據庫對比命令
diffChangeLog [diff parameters] 數據庫對比日志
Documentation Commands 文檔命令
dbDoc <outputDirectory> 基於當前數據庫和更改日志生成類似javadoc的文檔
Maintenance Commands 維護命令
tag <tag string> 給當前的數據庫打標簽,方便日后回滾
tagExists <tag string> 檢查對應的標簽是否存在
status [--verbose] 輸出為執行changeset的行數
unexpectedChangeSets[--verbose] 輸出本地不存在changeset 行數
validate 檢查是否有錯誤的changelog
calculateCheckSum <id> 檢查指定changeset id 的checksum值 格式為 filepath::id::author
clearCheckSums 從數據庫日志中刪除所有保存的校驗和
changelogSync 標記所有的更改已執行
changelogSyncSQL 生成標記更改已執行的sql並輸出到標准輸出
markNextChangeSetRan 將下一個變更標記為已執行
markNextChangeSetRanSQL 生成將下一個變更標記為已執行的sql並輸出到標准輸出
listLocks 列出liquibase數據庫鎖
releaseLocks 釋放所有的liquibase數據庫鎖
dropAll 刪除數據庫表(慎用!)




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM