liquibase是一个用于跟踪、管理和应用数据库变化的开源数据库重构工具。它将所有数据库的变化(包括数据和结构)都保存到XML文件中,便于版本控制。
liquibase特性
使用liquibase管理数据库的变更
使用步骤
step1:创建change log文件(changelog.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">
</databaseChangeLog>
step2:添加变更集
<?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">
<changeSet id="1" author="bob">
<createTable tableName="department">
<column name="id" type="int">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="name" type="varchar(50)">
<constraints nullable="false"/>
</column>
<column name="active" type="boolean" defaultValueBoolean="true"/>
</createTable>
</changeSet>
</databaseChangeLog>
每个更改集都用"id"属性和"author"属性唯一标识。“author"属性可以最大限度地减少重复的可能性。liquibase将每个更改集视为要应用于数据库的原子更改。通常最好只在更改集中包含一个更改。
step3:运行ChangeSet
liquibase可以使用命令行Ant Maven Spring等工具运行
命令演示
liquibase --driver=com.mysql.jdbc.Driver \
--classpath=/path/to/classes \
--changeLogFile=com/example/db.changelog.xml \
--url="jdbc:mysql://localhost/example" \
--username=user \
--password=asdf \
update
step4:检查数据库
运行完成后数据库中会包含一个名为"department"的表。还创建了另外表:"databasechangelog"和"databasechangeloglock"。databasechangelog表包含已针对数据库运行的所有语句列表。databasechangeloglock表用于确保两台计算机不会同时尝试修改数据库。
常见数据库操作:
添加列
在项目的开始,几乎不可能考虑到数据库中的所有列。而有时候,用户要求新的特性-例如为存储在系统中的信息收集更多的数据,这就要求添加新的列。
使用LiquiBase变更集中的Add Column数据库重构
<!--向数据库的distributor表添加了一个列-->
<changeSet id="4" author="tom">
<addColumn tableName="distributor">
<column name="phonenumber" type="varchar(255)"/>
<addColumn>
</changeSet>
<!--在数据表中的某一列后面插入一个新列-->
<changeSet id="5" author="tom">
<addColumn tableName="distributor">
<column afterColumn="phonenumber" name="newcolumn" type="varchar(16)"/>
<addColumn>
</changeSet>
创建表
<!--向数据库添加一个新表,并定义列、约束和默认值-->
<changeSet id="3" author="betsey">
<createTable tableName="distributor">
<column name="id" type="int">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="name" type="varchar(255)">
<constraints nullable="false"/>
</column>
<column name="address" type="varchar(255)">
<constraints nullable="true"/>
</column>
<column name="active" type="boolean" defaultValue="1"/>
</createTable>
</changeSet>
操作数据
<!--插入数据-->
<changeSet id="3" author="betsey">
<code type="section" width="100%">
<insert tableName="distributor">
<column name="id" valueNumberic="3"/>
<column name="name" value="Beer Company"/>
</insert>
<insert tableName="distributor">
<column name="id" valueNumberic="4"/>
<column name="name" value="Beer Distributors"/>
</insert>
</changeSet>