在实际项目开发中,通常会使用到数据库,比如mysql或者oracle等。既然涉及到数据库那肯定涉及到数据表的操作了,没有表怎么操作呢?以下面的一个场景为例进行说明:
一个开发部门有张三李四王五三个人并且同时在开发同一个项目,假如有一天张三需要在数据库表中新增一个列,然后吧唧吧唧写个一个sql,上线之前将sql脚本交给dba执行,然后上线项目,这个流程没问题,同样的场景,李四也需要修改数据库表,比如增加一个列,但是上线后,突然发现忘记将自己修改的sql脚本交给dba了,很显然,项目报错了。
上面的问题归根结底是因为有了sql脚本并交给其他人去执行,进而导致问题发生。
我们再来一个场景,比如王五来公司上班半年了,技术领导问他,这半年都涉及到那些表的修改操作,比如删除,增加列,新增表等等,那很显然,如果没有这些历史文件的记录和备份,那很显然王五也很迷茫了,这个问题说明对于数据库表的操作如果能有版本控制该多好。
上面的2个问题,其实我们就可以使用liquibase框架来解决。该框架主要解决两个问题:
(1)数据库表的操作有版本的概念,比如第一个版本增加列,第二个版本增加表,都有记录在案。
(2)项目启动的时候可以自动执行我们的SQL脚本,如果发现涉及到有表、视图、索引之类的变更操作,就直接运行这些SQL脚本。
操作步骤如下:
1.引入liquibase的jar包如下所示:
<dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-core</artifactId> <version>3.5.3</version> </dependency>
2.既然要操作表,肯定需要配置数据库连接的信息了,在这里我们使用spring方式,简单省事,dataBase.xml内容如下:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://127.0.0.1:3306/flowable6?useUnicode=true&characterEncoding=UTF-8 </value> </property> <property name="username"> <value>root</value> </property> <property name="password" value="" /> </bean> </beans>
3.我们暂且模拟一个表的创建,我们将需要创建的表的规则写到flowable-modeler-app-db-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" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
<changeSet id="1" author="flowable">
<!-- model -->
<createTable tableName="ACT_DE_MODEL">
<column name="id" type="varchar(255)">
<constraints primaryKey="true" nullable="false" />
</column>
<column name="name" type="varchar(400)">
<constraints nullable="false" />
</column>
<column name="model_key" type="varchar(400)">
<constraints nullable="false" />
</column>
<column name="description" type="varchar(4000)">
<constraints nullable="true" />
</column>
<column name="model_comment" type="varchar(4000)">
<constraints nullable="true" />
</column>
<column name="created" type="datetime(6)">
<constraints nullable="true" />
</column>
<column name="created_by" type="varchar(255)">
<constraints nullable="true" />
</column>
<column name="last_updated" type="datetime(6)">
<constraints nullable="true" />
</column>
<column name="last_updated_by" type="varchar(255)">
<constraints nullable="true" />
</column>
<column name="version" type="int">
<constraints nullable="true" />
</column>
<column name="model_editor_json" type="longtext">
<constraints nullable="true" />
</column>
<column name="thumbnail" type="longblob">
<constraints nullable="true" />
</column>
<column name="model_type" type="int">
<constraints nullable="true" />
</column>
</createTable>
</changeSet>
</databaseChangeLog>
4.测试,代码如下:
public static void main(String[] args) throws Exception { ApplicationContext ctx=new ClassPathXmlApplicationContext("cn/huimin/process/liquibase/dataBase.xml"); DataSource dataSource = (DruidDataSource) ctx.getBean("dataSource"); DatabaseConnection connection = new JdbcConnection(dataSource.getConnection()); Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(connection); Liquibase liquibase = new Liquibase("cn/huimin/process/liquibase/flowable-modeler-app-db-changelog.xml", new ClassLoade rResourceAccessor(), (DatabaseConnection) database.getConnection()); liquibase.update("flowable"); }
代码说明:
1.获取数据源。
2.实例化Liquibase 。
3.调用liquibase中的update方法来更新表。
转载请注明:分享牛 » 使用liquibase管理数据库