标签:liquibase spring java database spring-mvc
我正在尝试使用liquibase更改数据库的布局,但是我有一个问题是:
例如,假设我的旧数据库的表包含2列(firstName,lastName),而我的新数据库中只有两列(userName).
我该如何使用liquibase和Spring进行迁移.因为按照以下逻辑,我会丢失原始值.
理想情况下,我希望能够调用我的Java代码进行更改,但在这种情况下,在某些情况下可能需要过度设计;)
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog/1.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog/1.1
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-1.1.xsd">
<changeSet author="gcardoso" id="2012082703">
<dropColumn columnName="firstName" tableName="t_user"/>
<dropColumn columnName="lastName" tableName="t_user"/>
?????? How to migrate the names ??????
<addColumn tableName="t_user">
<column name="userName" type="VARCHAR2(255,0)">
<constraints nullable="false"/>
</column>
</addColumn>
</changeSet>
</databaseChangeLog>
解决方法:
您需要自定义重构.有两种可能性:
> Custom SQL以使用sql可以实现的更改
> Custom Refactoring class进行更复杂的更改.通过这种方法,您可以使用Java来实现重构.
所以你会
>添加新列
>通过自定义重构更改将数据从旧列迁移到新列
>删除旧列
如何在Spring JdbcTemplate中使用自定义重构类
@Override
public void execute(Database database) throws CustomChangeException {
JdbcConnection connection = (JdbcConnection) database.getConnection();
DataSource dataSource = new SingleConnectionDataSource(connection.getUnderlyingConnection(), true);
JdbcTemplate template = new JdbcTemplate(dataSource, false);
}
标签:liquibase,spring,java,database,spring-mvc 来源: https://codeday.me/bug/20191127/2076449.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。