MariaDB

Since 12.3.6 MariaDB has it's own platform with SQL2012 History support and DDL generation to support that.

MariaDB JDBC Driver - useLegacyDatetimeCode

The expectation is that the MariaDB JDBC driver is used and that useLegacyDatetimeCode=false is set. This ensures the JDBC driver honours the database server timezone. ebean-test will automatically set the useLegacyDatetimeCode parameter for but otherwise we need to ensure that parameter is set on the connection pool.

## example manually setting useLegacyDatetimeCode in properties file
datasource.db.username=my_app
datasource.db.password=test
datasource.db.url=jdbc:mariadb://localhost:4306/unit?useLegacyDatetimeCode=false

It is expected that the MariaDB JDBC Driver is used.

<dependency>
  <groupId>org.mariadb.jdbc</groupId>
  <artifactId>mariadb-java-client</artifactId>
  <version>2.6.0</version>
</dependency>

Testing

To test against MariaDB docker test container set the platform to mariadb in src/test/resources/application-test.yaml

Refer to docs / testing if application-test.yaml doesn't exist yet.

ebean:
  test:
    platform: mariadb
    ddlMode: dropCreate # none | dropCreate | migrations | create
    dbName: my_app

The above will use the following defaults:

username:{dbName}
password:test
port:4306
url:jdbc:mariadb://localhost:{port}/{dbName}?useLegacyDatetimeCode=false
image:mariadb:{version:10}

 

 

ebean-mariadb dependency

We can use the io.ebean:ebean-mariadb dependency rather than io.ebean:ebean if we want to only bring in the MariaDB specific platform code. Depending on io.ebean:ebean will bring in all platforms.

Types

UUID

UUID is not a native MariaDB type and can be mapped to either BINARY(16) or VARCHAR(36).

JSON

We can use @DbJson to map content.

History support

MariaDB has native SQL2011 history support and Ebean will generate DDL to enable and use this on entities annotated with @History.

Docker container

We can programmatically start a MariaDB docker container using ebean-test-docker via:

package main;

import io.ebean.docker.commands.MariaDBContainer;

public class Main {

  public static void main(String[] args) {

    MariaDBContainer container = MariaDBContainer.newBuilder("10.5")
      .dbName("unit")
      .password("unit")
      .build();

    container.start();
  }
}