package com.vladmihalcea.book.hpjp.util.providers; import com.vladmihalcea.book.hpjp.util.providers.queries.MySQLQueries; import com.vladmihalcea.book.hpjp.util.providers.queries.Queries; import org.hibernate.dialect.MariaDB103Dialect; import org.mariadb.jdbc.MariaDbDataSource; import javax.sql.DataSource; import java.sql.SQLException; import java.util.Properties; /** * @author Vlad Mihalcea */ public class MariaDBDataSourceProvider implements DataSourceProvider { private boolean rewriteBatchedStatements = true; private boolean cachePrepStmts = false; private boolean useServerPrepStmts = false; private boolean useTimezone = false; private boolean useJDBCCompliantTimezoneShift = false; private boolean useLegacyDatetimeCode = true; public boolean isRewriteBatchedStatements() { return rewriteBatchedStatements; } public void setRewriteBatchedStatements(boolean rewriteBatchedStatements) { this.rewriteBatchedStatements = rewriteBatchedStatements; } public boolean isCachePrepStmts() { return cachePrepStmts; } public void setCachePrepStmts(boolean cachePrepStmts) { this.cachePrepStmts = cachePrepStmts; } public boolean isUseServerPrepStmts() { return useServerPrepStmts; } public void setUseServerPrepStmts(boolean useServerPrepStmts) { this.useServerPrepStmts = useServerPrepStmts; } public boolean isUseTimezone() { return useTimezone; } public void setUseTimezone(boolean useTimezone) { this.useTimezone = useTimezone; } public boolean isUseJDBCCompliantTimezoneShift() { return useJDBCCompliantTimezoneShift; } public void setUseJDBCCompliantTimezoneShift(boolean useJDBCCompliantTimezoneShift) { this.useJDBCCompliantTimezoneShift = useJDBCCompliantTimezoneShift; } public boolean isUseLegacyDatetimeCode() { return useLegacyDatetimeCode; } public void setUseLegacyDatetimeCode(boolean useLegacyDatetimeCode) { this.useLegacyDatetimeCode = useLegacyDatetimeCode; } @Override public String hibernateDialect() { return MariaDB103Dialect.class.getName(); } @Override public DataSource dataSource() { MariaDbDataSource dataSource = new MariaDbDataSource(); try { dataSource.setUrl("jdbc:mariadb://localhost/high_performance_java_persistence?" + "rewriteBatchedStatements=" + rewriteBatchedStatements + "&cachePrepStmts=" + cachePrepStmts + "&useServerPrepStmts=" + useServerPrepStmts + "&useTimezone=" + useTimezone + "&useJDBCCompliantTimezoneShift=" + useJDBCCompliantTimezoneShift + "&useLegacyDatetimeCode=" + useLegacyDatetimeCode ); dataSource.setUser("root"); dataSource.setPassword("admin"); } catch (SQLException e) { throw new IllegalStateException(e); } return dataSource; } @Override public Class<? extends DataSource> dataSourceClassName() { return MariaDbDataSource.class; } @Override public Properties dataSourceProperties() { Properties properties = new Properties(); properties.setProperty("url", url()); return properties; } @Override public String url() { return "jdbc:mariadb://localhost/high_performance_java_persistence?user=root&password=admin"; } @Override public String username() { return null; } @Override public String password() { return null; } @Override public Database database() { return Database.MARIADB; } @Override public String toString() { return "MySQLDataSourceProvider{" + "rewriteBatchedStatements=" + rewriteBatchedStatements + ", cachePrepStmts=" + cachePrepStmts + ", useServerPrepStmts=" + useServerPrepStmts + ", useTimezone=" + useTimezone + ", useJDBCCompliantTimezoneShift=" + useJDBCCompliantTimezoneShift + ", useLegacyDatetimeCode=" + useLegacyDatetimeCode + '}'; } @Override public Queries queries() { return MySQLQueries.INSTANCE; } }