之前已经介绍了很多在Spring Boot中使用MySQL的案例,包含了Spring Boot最原始的JdbcTemplate、Spring Data JPA以及我们国内最常用的MyBatis。同时,对于一些复杂场景比如:更换Druid数据源,或是多数据源的情况也都做了介绍。

不论我们使用哪一个具体实现框架,都离不开对数据库表结构的管理。而这一类管理一直都存在一个问题:由于数据库表元数据存储于数据库中,而我们的访问逻辑都存在于Git或其他代码仓库中。Git已经帮助我们完成了代码的多版本管理,那么数据库中的表该如何做好版本控制呢?

今天我们就来介绍在Spring Boot中使用Flyway来管理数据库版本的方法。

Flyway简介

Flyway是一个简单开源数据库版本控制器(约定大于配置),主要提供migrate、clean、info、validate、baseline、repair等命令。它支持SQL(PL/SQL、T-SQL)方式和Java方式,支持命令行客户端等,还提供一系列的插件支持(Maven、Gradle、SBT、ANT等)。

官方网站:https://flywaydb.org/

本文对于Flyway的自身功能不做过多的介绍,读者可以通过阅读官方文档或利用搜索引擎获得更多资料。下面我们具体说说在Spring Boot应用中的应用,如何使用Flyway来创建数据库以及结构不一致的检查。

动手试试

下面我们先预设一个开发目标:

假设我们需要开发一个用户管理系统,那么我们势必要设计一张用户表,并实现对用户表的增删改查操作。

在任务1的功能完成之后,我们又有一个新需求,需要对用户表增加了一个字段,看看如何实现对数据库表结构的更改。

目标 1 的实现

第一步:创建一个基础的Spring Boot项目,并在pom.中加入Flyway、MySQL连接和数据访问相关的必要依赖(这里选用spring-boot-starter-jdbc作为例子)

org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-jdbcmysqlmysql-connector-javaorg.flywaydbflyway-coreorg.projectlomboklombokprovidedorg.springframework.bootspring-boot-starter-testtest

第二步:按Flyway的规范创建版本化的SQL脚本。

在工程的src/main/resources目录下创建db目录,在db目录下再创建migration目录

在migration目录下创建版本化的SQL脚本V1__Base_version.sql

DROP TABLE IF EXISTS user ;CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', `name` varchar(20) NOT NULL COMMENT '姓名', `age` int(5) DEFAULT NULL COMMENT '年龄', PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

注意:如果你不想将SQL脚本放到其他目录,可以用spring.flyway.locations参数来配置。这里不同于1.x版本的配置项flyway.locations

第三步:根据User表的结构,编写对应的实体定义

@Data@NoArgsConstructorpublic class User { private Long id; private String name; private Integer age;}

第四步:编写用户操作接口和实现

public interface UserService { /** * 新增一个用户 * * @param name * @param age */ int create(String name, Integer age); /** * 根据name查询用户 * * @param name * @return */ List getByName(String name); /** * 根据name删除用户 * * @param name */ int deleteByName(String name); /** * 获取用户总量 */ int getAllUsers(); /** * 删除所有用户 */ int deleteAllUsers();}@Servicepublic class UserServiceImpl implements UserService { private JdbcTemplate jdbcTemplate; UserServiceImpl(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } @Override public int create(String name, Integer age) { return jdbcTemplate.update("insert into USER(NAME, AGE) values(?, ?)", name, age); } @Override public List getByName(String name) { List users = jdbcTemplate.query("select * from USER where NAME = ?", (resultSet, i) -> { User user = new User(); user.setId(resultSet.getLong("ID")); user.setName(resultSet.getString("NAME")); user.setAge(resultSet.getInt("AGE")); return user; }, name); return users; } @Override public int deleteByName(String name) { return jdbcTemplate.update("delete from USER where NAME = ?", name); } @Override public int getAllUsers() { return jdbcTemplate.queryForObject("select count(1) from USER", Integer.class); } @Override .........

flyway常用配置_Spring Boot 2.x基础教程:使用Flyway管理数据库版本相关推荐

  1. flyway常用配置_Spring Boot 2 实战:使用 Flyway 管理你数据库的版本变更

    1. 前言 随着项目的不断迭代,数据库表结构.数据都在发生着变化.甚至有的业务在多环境版本并行运行.数据为王的时代,管理好数据库的版本也成为了迫切的需要.如何能做到像 Git 之类的版本控制工具来管理 ...

  2. node在regedit配置哪个位置_Spring Boot 2.x基础教程:Spring Data JPA的多数据源配置

    上一篇我们介绍了在使用JdbcTemplate来做数据访问时候的多数据源配置实现.接下来我们继续学习如何在使用Spring Data JPA的时候,完成多数据源的配置和使用. 添加多数据源的配置 先在 ...

  3. 开启注解缓存_Spring Boot 2.x基础教程:进程内缓存的使用与Cache注解详解

    随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决这一问题非常好的手段之一.Spring 3开始提供了强大的基于注解的缓 ...

  4. jeesite如何配置swagger_Spring Boot 2.x基础教程:Swagger接口分类与各元素排序问题详解...

    之前通过Spring Boot 2.x基础教程:使用Swagger2构建强大的API文档一文,我们学习了如何使用Swagger为Spring Boot项目自动生成API文档,有不少用户留言问了关于文档 ...

  5. spring cloud入门_Spring Boot 2.x基础教程:快速入门

    简介 在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候,是否觉得一堆反复黏贴的配置有一些厌烦?那么您就不妨来试试使用Spring Boot ...

  6. Spring Boot 2.x基础教程:事务管理入门

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 什么是事务? 我们在开发企业应用时,通常业务人员的一个操 ...

  7. Spring Boot 2.x基础教程:使用JTA实现分布式事务

    在一个Spring Boot项目中,连接多个数据源还是比较常见的.之前也介绍了如何在几种常用框架的场景下配置多数据源,具体可见: Spring Boot 2.x基础教程:JdbcTemplate的多数 ...

  8. Spring Boot 2.x基础教程:使用JTA实现多数据源的事务管理

    在一个Spring Boot项目中,连接多个数据源还是比较常见的.之前也介绍了如何在几种常用框架的场景下配置多数据源,具体可见: Spring Boot 2.x基础教程:JdbcTemplate的多数 ...

  9. Spring Boot 2.x基础教程:使用集中式缓存Redis

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 之前我们介绍了两种进程内缓存的用法,包括Spring B ...

最新文章

  1. ubuntu 14.04 安装java_Ubuntu 14.04中安装Java
  2. iOS:quartz2D绘图(给图形绘制阴影)
  3. beego mysql session_关于go中beego/session的小总结
  4. dump mysql database_【MySQL Database】数据迁移工具:mysqldump
  5. Python Lambda函数的几种使用方法
  6. manually create IBASE 03 in CRM
  7. 欧拉定理(洛谷-P5091)(十进制快速幂实现)
  8. Error: Cannot find module ‘webpack-cli/bin/config-yargs‘ 解决办法
  9. 锂离子电池容量计量之库仑计法
  10. 推荐系统笔记(二):常用数据集Movielens学习
  11. 常用的台式计算机,台式电脑常见简单故障排除
  12. 【Unity】Fly Bird(游戏实战)(1)
  13. unity将指定UI图片置为灰色
  14. ffmpeg生成裸眼3D、伪3D视频
  15. Java中统计耗时的方法
  16. ISCC 2018 PWN WriteUp
  17. PHP调用jsignature生成图片,App端jSignature签字版生成透明背景png图片
  18. 计算机教室灭火器配置标准,计算机教室与多媒体教室安装场地基本要求.doc
  19. checked和unchecked的区别
  20. NetSuite SuiteAnalytics 高级搜索 全课程中文学习视频

热门文章

  1. 超适合小白的python新手教程
  2. 这又何止呢的openeim002
  3. 在每趟长途的HTML5挑运之后
  4. 联信高效的数据传输机制
  5. [CB]加快BCB编译速度
  6. Python的主要8大应用领域,你还不会吗?
  7. 大数据时代,前端开发者该如何提升自身竞争力(附教程视频)
  8. 小程序 delete_程序员崩溃的43个瞬间!搞工科的是不是都这样?
  9. c++批量重命名_手把手教你用Python批量给图片添加水印 | 知了干货分享
  10. STM32----重温ADC测量电压值