如何使用Hibernate连接MySQL数据库?
在这篇文章中,我们将学习如何使用Hibernate这样的ORM(对象关系映射)框架连接MySQL数据库。
首先,我们需要在我们的pom.xml文件中添加Hibernate的Maven依赖项:
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.6.2.Final</version> </dependency> Now, let us define an entity class that will be mapped to a database table using hibernate. @Entity @Table( name = " Employee") public class Employee { @Id @GeneratedValue(strategy = GenerationType.AUTO) Long id; @Column(name = "first_name") String firstName; @Column(name = "last_name") String lastName; //Getters //Setters }
这里:
@Table 用于指定此类将映射到的表名。
@Entity 将类映射到关系数据库表。
@Id 将在表的给定属性上创建一个主键。
@GeneratedValue 指定用于生成属性值的策略。Strategy=GenerationType.AUTO表示它将自动递增。
现在,我们需要为Hibernate定义一个名为hibernate.cfg.xml的配置文件。Hibernate将使用此配置文件连接到提供的数据库。
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- JDBC Database connection settings --> <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/dbName?useSSL=false</property> <property name="connection.username">root</property> <property name="connection.password">root</property> <!-- JDBC connection pool settings ... using built-in test pool --> <property name="connection.pool_size">1</property> <!-- Echo the SQL to stdout --> <property name="show_sql">true</property> <!-- Select our SQL dialect --> <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">create-drop</property> <!-- name of annotated entity class --> <mapping class="academy.company.Employee"/> </session-factory> </hibernate-configuration>
SessionFactory管理会话的创建和生命周期。每个数据库都需要一个SessionFactory。
Session用于创建与数据库的连接/会话。
这里,create-drop将检查表是否已存在,然后它将首先删除表,然后创建一个新表。
Dialect表示我们在数据库中使用的MySQL版本。
示例
在运行Java应用程序之前,我们只需要在Main.java中配置SessionFactory:
package academy.company; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class Main { public static void main(String[] args) { SessionFactory sessionFactory; sessionFactory = new Configuration() .configure("academy/company/hibernate.cfg.xml") .buildSessionFactory(); } }
现在,当我们启动Java应用程序时,我们可以在控制台中看到Hibernate将首先删除Employee表(如果已存在)。如果不存在,它将使用我们在employee类中定义的属性创建Employee表。
输出
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect Hibernate: drop table if exists Employee Jan 08, 2022 1:26:32 PM org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@eca6a74] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode. Hibernate: drop table if exists hibernate_sequence Hibernate: create table Employee (id bigint not null, first_name varchar(255), last_name varchar(255), primary key (id)) engine=MyISAM
广告