文档章节

Maven集成Mybatis Migrations数据库迁移工具

文帅
 文帅
发布于 2016/11/23 17:08
字数 882
阅读 146
收藏 1
点赞 0
评论 0

随着开发进度不断向前,你会发现你的数据库模型需要更改,而当这种情况发生时需要更新数据库。
使用数据库迁移框架。和源码版本控制工具跟踪更改源码文件一样,数据库迁移框架跟踪更改数据库模型,然后将增量变化应用到数据库中。

1.官方文档地址


2.maven插件


  • pom.xml文件中添加plugin

         <plugin>
             <groupId>org.mybatis.maven</groupId>
             <artifactId>migrations-maven-plugin</artifactId>
             <version>1.1.2</version>
             <configuration>
                 <repository>${basedir}/src/main/resources/migrate</repository>
                 <environment>${env}</environment>
             </configuration>
             <executions>
                 <execution>
                     <id>migration-package</id>
                     <phase>package</phase>
                     <goals>
                         <goal>pending</goal>
                     </goals>
                 </execution>
             </executions>
             <dependencies>
                 <dependency>
                     <groupId>mysql</groupId>
                     <artifactId>mysql-connector-java</artifactId>
                     <version>${mysql.version}</version>
                 </dependency>
             </dependencies>
         </plugin>
    
  • configuration

    • configuration中包含两个节点,repository为项目中仓库地址,主要包含数据库配置文件和需执行脚本
    • environment 为需执行migrate的环境
  • execution

    • id:命令ID
    • phase:在maven生命周期的哪个阶段执行,本文选择的是package
    • goal:在此阶段执行migrate的哪个命令,此处选择的是pending

3.命令语法


命令作用使用示例说明
init初始化环境migrate init--path设置生成资源库位置,默认当前目录(必须为空目录) --idpattern 设置生成脚本文件的前缀,默认为当前时间戳
bootstrap起始脚本migrate bootstrap执行数据库起始脚本,初始化数据库
new创建脚本migrate new "create blog table"根据模板在./scripts目录下创建前缀为 --idpattern(默认时间戳)的脚本 "create blog table"为生成的脚本描述生成的文件名为"(前缀+create_blog_table)"
status当前状态migrate status查看当前工作空间状态 Applied At: 为应用时间 pending 表示状态为待执行
up执行提交migrate up使所有待处理的任务应用到数据库 执行do选项中的语句
down回退提交migrate down执行undo选项中的语句 并使状态变为pending 默认回退一个版本,后加数字可指定回退n个版本
versionup/down到指定版本migrate version 20160411163849指定版本和之前的版本up,指定版本之后的down
pending比up更强大migrate pending当你new一个script且没有up之前,有另外的人new了一个script且up了,此时你执行up将会不成功,你需要先确定你的script与之无冲突之后执行pengding
script合并脚本migrate pending 版本1 版本2 > do.sql合并版本1到版本2中的do选项中的sql

4.IDEA实操


  1. 修改pom.xml

    • 修改后Plugins列表会多一个migration
      MAVEN Plugins
  2. 初始化

    • 执行migration:init,等待控制台输出success后,${basedir}/src/main/resources/migrate 目录下会生成此文件夹
      Repository
    • environments文件夹下为各环境数据库配置文件
    • scripts文件夹下为生成的脚本所在
    • 详细解释请参考README文件
  3. 创建一个脚本

    • 打开 Excute Maven Goal

    • 输入命令并执行:
      migration:new -Dmigration.description=create_test_table -P dev Excute Maven Goal

    • scripts文件夹下会生产对应的 .sql 文件

    • 修改新生成的 .sql 文件

            -- // create_test_table
            -- Migration SQL that makes the change goes here.
            -- 此处写需执行的sql语句
      
            -- //[@UNDO](https://my.oschina.net/u/1757134)
            -- SQL to undo the change goes here.
            -- 此处写回滚的sql语句
      
  4. 执行

    • 执行status查看状态,up或者pending执行语句,需回滚执行down
    • 亦可在pom.xml文件中为package或install命令绑定执行

© 著作权归作者所有

共有 人打赏支持
文帅
粉丝 1
博文 2
码字总数 894
作品 0
普陀
后端工程师
MyBatis Migrations 3.2.1 发布

MyBatis Migrations 3.2.1 发布了,MyBatis Migrations是一款数据库迁移工具。改进日志如下: #13 Fixed a bug caused by a dot in description. #14 Support non-timestamp ID sequence. #......

oschina
2016/06/12
3.7K
8
MyBatis Migrations 3.3.2 发布,数据库迁移工具

MyBatis Migrations 3.3.2 发布了。MyBatis Migrations是一款数据库迁移工具。更新内容如下: Added '--quiet' command line option. #92 Added '--color' command line option. #104 It is......

达尔文
03/15
0
0
为什么要用PHP Migrations

曾经也思考过,代码管理可以用代码版本控制git、svn来协同,怎么数据库字段就不能用git、svn来同步? 后来在团队开发中认识到Migrations数据库迁移工具,我的理解是【数据库字段同步工具】,...

小和
2016/09/02
29
0
WellGroup/jeewell

jeewell: jeewell是开源的JavaEE开发平台,集成流行的开发框架,采用MVC的分层设计思想, 为JavaEE开发这提供一个安全、高效的开发模式,目前的版本为0.9.8,功能正在逐步完善中。 开发环境...

WellGroup
2016/07/07
0
0
数据库版本管理工具Flyway——基础篇

api:http://flywaydb.org/getstarted/firststeps/api.html 1. 引言 想到要管理数据库的版本,是在实际产品中遇到问题后想到的一种解决方案,当时各个环境的数据库乱作一团,没有任何一个人(...

引鸩怼孑
2015/09/09
178
0
MyBatis Schema Migrations数据库脚本管理

概述 当今的大多数软件开发团队已经掌握了使用SVN等SCM工具对源代码和文档进行有效的版本控制,但是,如何将DB的变更也纳入到版本控制中却是一个亟待解决的难题; 这个问题普遍存在却被严重忽...

Arthur126
2016/07/20
43
0
Mybatis 分页插件 3.7.4 发布

Mybatis分页插件 - PageHelper 如果你也在用Mybatis,建议尝试该分页插件,这一定是最方便使用的分页插件。 分页插件支持任何复杂的单表、多表分页,部分特殊情况请看重要提示。 想要使用分页...

Liuzh_533
2015/05/26
2.1K
16
EF架构~CodeFirst数据迁移与防数据库删除

本文介绍两个概念,防数据库自动删除,这是由于在code first模式下,当数据实体发生变化时,会对原来数据库进行删除,并将新数据表添加进来,但这对于我们的运营环境数据库,是万万不能接受的,第二个...

mcy247
2017/12/05
0
0
数据库移植工具--Scala Migrations

Scala Migrations 是一个类库用来简化数据库模型的升级和回滚的管理,允许通过一个版本控制系统来管理数据库模型。它旨在允许多个开发人员对一个项目一个数据库后端设计模式的修改,独立适用...

匿名
2009/08/02
727
0
ASP.NET MVC 5 - 给电影表和模型添加新字段

在本节中,您将使用Entity Framework Code First来实现模型类上的操作。从而使得这些操作和变更,可以应用到数据库中。 默认情况下,就像您在之前的教程中所作的那样,使用 Entity Framework...

葡萄城控件技术团队
2014/06/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

大数据教程(2.11):keeperalived+nginx高可用集群搭建教程

上一章节博主为大家介绍了目前大型互联网项目的系统架构体系,相信大家应该注意到其中很重要的一块知识nginx技术,在本节博主将为大家分享nginx的相关技术以及配置过程。 一、nginx相关概念 ...

em_aaron
8分钟前
0
0
Apache Directory Studio连接Weblogic内置LDAP

OBIEE默认使用Weblogic内置LDAP管理用户及组。 要整理已存在的用户及组,此前办法是导出安全数据,文本编辑器打开认证文件,使用正则表达式获取用户及组的信息。 后来想到直接用Apache Dire...

wffger
15分钟前
0
0
HFS

FS,它是一种上传文件的软件。 专为个人用户所设计的 HTTP 档案系统 - Http File Server,如果您觉得架设 FTP Server 太麻烦,那么这个软件可以提供您更方便的档案传输系统,下载后无须安装,...

garkey
19分钟前
0
0
STM 32 窗口看门狗

http://bbs.elecfans.com/jishu_805708_1_1.html https://blog.csdn.net/a1985831055/article/details/77404131...

whoisliang
昨天
0
0
Dubbo解析(六)-服务调用

当dubbo消费方和提供方都发布和引用完成后,第四步就是消费方调用提供方。 还是以dubbo的DemoService举例 -- 提供方<dubbo:application name="demo-provider"/><dubbo:registry address="z...

青离
昨天
1
0
iptables规则备份和恢复、firewalld的9个zone以及操作和service的操作

保存以及备份iptalbes规则 设定了的防火墙规则要进行保存,否则系统重启后这些规则就没有了,使用命令 ”service iptables save ” 会把设定好的防火墙规则保存到文件/etc/sysconfig/iptabl...

黄昏残影
昨天
0
0
k8s image

k8s.gcr.io/kube-apiserver-amd64:v1.11.0k8s.gcr.io/kube-controller-manager-amd64:v1.11.0k8s.gcr.io/kube-scheduler-amd64:v1.11.0k8s.gcr.io/kube-proxy-amd64:v1.11.0k8s.gcr.......

分秒
昨天
0
0
数据结构--排序

这篇博客包含了数据结构中多种的排序算法: (1)简单选择:第一趟在A[0]~A[n-1]之间找到最小的,与A[0]进行交换,之后在A[1]~A[n-1]之间进行。。。第i趟在A[i-1]~A[n-1]之间找到最小的,最后...

wangxuwei
昨天
1
0
一名3年工作经验的java程序员应该具备的职业技能

一名3年工作经验的Java程序员应该具备的技能,这可能是Java程序员们比较关心的内容。我这里要说明一下,以下列举的内容不是都要会的东西—-但是如果你掌握得越多,最终能得到的评价、拿到的薪...

老道士
昨天
3
0
MAC安装JDK

一 :在JDK官网下载对应的JDK版本 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 二:找到JDK安装目录,点击会出现图标,双击图标自动安装,勾选默...

WALK_MAN
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部