MySql

测试

要在 MySQL docker 测试容器中进行测试,请将 src/test/resources/application-test.yaml 中的 platform 设置为 mysql

如果 application-test.yaml 尚未存在,请参阅 文档 / 测试

排序规则

使用 MySql 可以(并且可能应该)指定我们希望数据库使用的排序规则和字符集。在下面的示例中,我们将排序规则指定为 utf8mb4_unicode_ci

ebean:
  test:
    platform: mysql #, h2, postgres, mysql, oracle, sqlserver
    ddlMode: dropCreate # none | dropCreate | migrations | create
    dbName: test
    mysql:
      collation: utf8mb4_unicode_ci
      characterSet: utf8mb4

上述内容将使用以下默认值

用户名{databaseName}
密码test
端口4306
URLjdbc:mysql://localhost:{port}/{databaseName}
驱动程序com.mysql.jdbc.Driver
镜像mysql:{version}

 

 

"default" - 排序规则

我们可以将排序规则指定为 default,这样排序规则将留给 MySql 使用的默认值。

ebean:
  test:
    platform: mysql #, h2, postgres, mysql, oracle, sqlserver
    ddlMode: dropCreate # none | dropCreate | migrations | create
    dbName: test
    mysql:
      version: 8.0
      collation: default

io.ebean.docker 的日志中,日志记录 DEBUG 级别,我们可以看到:--character-set-server--collation-server

... INFO  io.ebean.docker.commands.Commands - Run container ut_mysql with port:4306 db:my_app user:my_app mode:Create shutdown:
... DEBUG io.ebean.docker.commands.Commands - docker run -d --name ut_mysql -p 4306:3306 -e MYSQL_ROOT_PASSWORD=admin mysql:5.6

ebean-mysql 依赖项

如果我们只想引入特定于 MySql 的平台代码,我们可以使用 io.ebean:ebean-mysql 依赖项,而不是 io.ebean:ebean。依赖于 io.ebean:ebean 将引入所有平台。

类型

UUID

UUID 不是 MySQL 的原生类型,可以映射到 BINARY(16) 或 VARCHAR(36)。

JSON

我们可以使用 @DbJson 映射内容。

历史支持

通过生成触发器和历史记录表来提供对 MySQL 的历史记录支持。

Docker 容器

我们可以以编程方式启动 mysql 的 docker 容器版本。这可能是本地运行应用程序的有用方法。

下面使用 ebean-test-docker 依赖项,该依赖项已随 ebean-test 一起提供。如果我们没有对 ebean-test 的依赖项,则添加 io.ebean:ebean-test-docker:5.0 作为依赖项。

package main;

import io.ebean.docker.commands.MySqlContainer;

public class Main {

  public static void main(String[] args) {

    MySqlContainer container = MySqlContainer.newBuilder("8.0")
      .dbName("my_db")
      .user("my_user")
      .password("my_pass")
      .build();

    // by default this mysql docker collation is case sensitive using utf8mb4_bin
    // builder.collation("default");
    // builder.collation("utf8mb4_unicode_ci");
    // builder.characterSet("utf8mb4");

    container.start();
  }
}

上述操作将在 端口 4306 上以编程方式启动一个 MySql 8 docker 容器。它将创建一个数据库和一个容器名为 *ut_mysql* 的用户。如果容器已存在,它将删除并重新创建容器。

Docker 跟踪日志记录

io.ebean.docker 的日志级别设置为 trace,以帮助解决任何问题或了解 ebean-test-docker 在做什么。

15:59:48.965 [main] TRACE i.e.d.c.Commands - sqlRun: select User from user where User = 'my_user'
15:59:48.980 [main] TRACE i.e.d.c.Commands - sqlRun: show databases like 'my_db'
15:59:48.982 [main] DEBUG i.e.d.c.Commands - sqlRun: drop database my_db
15:59:48.987 [main] TRACE i.e.d.c.Commands - sqlRun: show databases like 'my_db'
15:59:48.989 [main] DEBUG i.e.d.c.Commands - sqlRun: create database my_db
15:59:48.995 [main] DEBUG i.e.d.c.Commands - sqlRun: set global log_bin_trust_function_creators=1
15:59:48.996 [main] TRACE i.e.d.c.Commands - sqlRun: select User from user where User = 'my_user'
15:59:48.997 [main] DEBUG i.e.d.c.Commands - sqlRun: create user 'my_user'@'%' identified by 'my_pass'
15:59:49.001 [main] DEBUG i.e.d.c.Commands - sqlRun: grant all on my_db.* to 'my_use