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 |
URL | jdbc: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