Перед тем, как соединяться из Hibernate с MySQL, не забудьте создать пользователя, базу данных и предоставить пользователю права на неё:
1 2 3 4 | CREATE USER 'test'@'%' IDENTIFIED BY 'test'; CREATE DATABASE test; GRANT ALL PRIVILEGES ON test.* TO test; FLUSH PRIVILEGES |
Команды выше создают пользователя test с паролем test, создают базу данных test и, наконец, дают пользователю все права на эту базу. В условиях реального приложения разумеется следует выбрать пароль посложнее, да и права раздавать поаккуратнее.
Использование MySQL непосредственно с Hibernate
Перед тем, как использовать MySQL, необходимо добавить его JDBC драйвер в зависимости maven:
1 2 3 4 5 6 7 8 9 10 11 | <properties> <mysql.version>6.0.5</mysql.version> </properties> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> </dependencies> |
С драйвером MySQL в classpath можно настраивать Hibernate:
1 2 3 4 5 6 7 8 9 10 11 | <hibernate-configuration> <session-factory> <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/test</property> <property name="hibernate.connection.username">test</property> <property name="hibernate.connection.password">test</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> <!-- other settings --> </session-factory> </hibernate-configuration> |
JDBC url у MySQL имеет следующий формат: jdbc:mysql://хост:порт/имябазы, например jdbc:mysql://127.0.0.1:3306/test. Имя пользователя и пароль передаются отдельными параметрами. Наконец, надо не забыть переключить диалект Hibernate на MySQL, что делается в последней строке.
Hibernate, MySQL и пул c3p0
Однако, как мы знаем, одно соединение не очень удобно использовать в реальном приложении. Поэтомунастроим пул c3p0 для совместного использования с Hibernate и MySQL.
Для этого, кроме MySQL JDBC драйвера, надо добавить непосредственно c3p0 и библиотеку hibernate-cp30 к зависимостям maven:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <properties> <hibernate.version>5.2.1.Final</hibernate.version> <c3p0.version>0.9.5.2</c3p0.version> </properties> <dependencies> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>${c3p0.version}</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-c3p0</artifactId> <version>${hibernate.version}</version> </dependency> </dependencies> |
Для включения c3p0 достаточно передать по меньшей мере один параметр c3p0 в настройки Hibernate:
1 2 3 4 5 6 7 8 9 10 11 | <hibernate-configuration> <session-factory> <property name="hibernate.connection.url">jdbc:mysql://192.168.75.5:3306/test</property> <property name="hibernate.connection.username">test</property> <property name="hibernate.connection.password">test</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> <property name="hibernate.c3p0.min_size">5</property> <!--Other settings--> </session-factory> </hibernate-configuration> |
Остальные параметры остаются такими же, как и для MySQL без c3p0.
Hibernate, MySQL и пул HikariCP
К сожалению, в Hibernate нет настолько высококачественной поддержки HikariCP, аналогичной c3p0. Поэтому настройка HikariCP требует чуть чуть больше работы.
В первую очередь, конечно же, надо добавить ещё и артефакт HikariCP в зависимости (не забываем про MySQL JDBC драйвер):
1 2 3 4 5 6 7 8 9 10 11 | <properties> <hikaricp.version>2.4.3</hikaricp.version> </properties> <dependencies> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>${hikaricp.version}</version> </dependency> </dependencies> |
Потом необходимо изменить конфигурацию Hibernate для работы с HikariCP:
1 2 3 4 5 6 7 8 9 10 11 | <hibernate-configuration> <session-factory> <property name="hibernate.connection.provider_class">com.zaxxer.hikari.hibernate.HikariConnectionProvider</property> <property name="hibernate.hikari.dataSourceClassName">com.mysql.cj.jdbc.MysqlDataSource</property> <property name="hibernate.hikari.dataSource.url">jdbc:mysql://192.168.75.5:3306/test</property> <property name="hibernate.hikari.username">test</property> <property name="hibernate.hikari.password">test</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> <!-- Other settings --> </session-factory> </hibernate-configuration> |
Все настройки соединения с MySQL переименовываются и к ним добавляется два дополнительных параметра. Вначале в Hibernate настраивается использование HikariCP, затем указывается какой класс использовать для соединения с MySQL.