How to connect hibernate with MySQL Database?

In this article, we will see how we can connect to MySQL database using an ORM (object relational mapping) framework like hibernate.

First of all, we need to add maven dependency for hibernate in our pom.xml file ?

<div class="code-mirror  language-java" contenteditable="plaintext-only" spellcheck="false" style="outline: none; overflow-wrap: break-word; overflow-y: auto; white-space: pre-wrap;"><span class="token operator"><</span><span class="token operator">!</span><span class="token operator">--</span> https<span class="token operator">:</span><span class="token operator">/</span><span class="token operator">/</span>mvnrepository<span class="token punctuation">.</span>com<span class="token operator">/</span>artifact<span class="token operator">/</span>org<span class="token punctuation">.</span>hibernate<span class="token operator">/</span>hibernate<span class="token operator">-</span>core <span class="token operator">--</span><span class="token operator">></span>
<span class="token generics"><span class="token punctuation"><</span>dependency<span class="token punctuation">></span></span>
   <span class="token generics"><span class="token punctuation"><</span>groupId<span class="token punctuation">></span></span>org<span class="token punctuation">.</span>hibernate<span class="token operator"><</span><span class="token operator">/</span>groupId<span class="token operator">></span>
   <span class="token generics"><span class="token punctuation"><</span>artifactId<span class="token punctuation">></span></span>hibernate<span class="token operator">-</span>core<span class="token operator"><</span><span class="token operator">/</span>artifactId<span class="token operator">></span>
   <span class="token generics"><span class="token punctuation"><</span>version<span class="token punctuation">></span></span><span class="token number">5.6</span><span class="token number">.2</span><span class="token punctuation">.</span>Final<span class="token operator"><</span><span class="token operator">/</span>version<span class="token operator">></span>
<span class="token operator"><</span><span class="token operator">/</span>dependency<span class="token operator">></span>
<span class="token class-name">Now</span><span class="token punctuation">,</span> let us define an entity <span class="token keyword">class</span> that will be mapped <span class="token keyword">to</span> <span class="token namespace">a</span> database table using hibernate<span class="token punctuation">.</span>
<span class="token annotation punctuation">@Entity</span>
<span class="token annotation punctuation">@Table</span><span class="token punctuation">(</span> name <span class="token operator">=</span> <span class="token string">" Employee"</span><span class="token punctuation">)</span>
<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Employee</span> <span class="token punctuation">{</span>
   <span class="token annotation punctuation">@Id</span>
   <span class="token annotation punctuation">@GeneratedValue</span><span class="token punctuation">(</span>strategy <span class="token operator">=</span> <span class="token class-name">GenerationType</span><span class="token punctuation">.</span>AUTO<span class="token punctuation">)</span>
   <span class="token class-name">Long</span> id<span class="token punctuation">;</span>
   <span class="token annotation punctuation">@Column</span><span class="token punctuation">(</span>name <span class="token operator">=</span> <span class="token string">"first_name"</span><span class="token punctuation">)</span>
   <span class="token class-name">String</span> firstName<span class="token punctuation">;</span>
   
   <span class="token annotation punctuation">@Column</span><span class="token punctuation">(</span>name <span class="token operator">=</span> <span class="token string">"last_name"</span><span class="token punctuation">)</span>
   <span class="token class-name">String</span> lastName<span class="token punctuation">;</span>
   <span class="token comment">//Getters</span>
   <span class="token comment">//Setters</span>
<span class="token punctuation">}</span>
</div>

In here,

@Table is used to specify the name of the table to which this class will be mapped.

@Entity will map the class to relational database table.

@Id will create a primary key on given attribute of the table.

@GeneratedValue specifies the strategy to be used for generating the values of the attribute. Strategy=GenerationType.AUTO means it will be auto-incremented.

Now, we need to define a configuration file for hibernate named hibernate.cfg.xml. This configuration file is to be used by hibernate to connect with the provided database.

<div class="code-mirror  language-java" contenteditable="plaintext-only" spellcheck="false" style="outline: none; overflow-wrap: break-word; overflow-y: auto; white-space: pre-wrap;"><span class="token operator"><</span><span class="token operator">!</span>DOCTYPE hibernate<span class="token operator">-</span>configuration PUBLIC
   <span class="token string">"-//Hibernate/Hibernate Configuration DTD 3.0//EN"</span>
   <span class="token string">"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"</span><span class="token operator">></span>
<span class="token operator"><</span>hibernate<span class="token operator">-</span>configuration<span class="token operator">></span>
   <span class="token operator"><</span>session<span class="token operator">-</span>factory<span class="token operator">></span>
      <span class="token operator"><</span><span class="token operator">!</span><span class="token operator">--</span> JDBC <span class="token class-name">Database</span> connection settings <span class="token operator">--</span><span class="token operator">></span>
      <span class="token operator"><</span>property name<span class="token operator">=</span><span class="token string">"connection.driver_class"</span><span class="token operator">></span><span class="token class-name"><span class="token namespace">com<span class="token punctuation">.</span>mysql<span class="token punctuation">.</span>cj<span class="token punctuation">.</span>jdbc<span class="token punctuation">.</span></span>Driver</span><span class="token operator"><</span><span class="token operator">/</span>property<span class="token operator">></span>
      <span class="token operator"><</span>property name<span class="token operator">=</span><span class="token string">"connection.url"</span><span class="token operator">></span>jdbc<span class="token operator">:</span>mysql<span class="token operator">:</span><span class="token operator">/</span><span class="token operator">/</span>localhost<span class="token operator">:</span><span class="token number">3306</span><span class="token operator">/</span>dbName<span class="token operator">?</span>useSSL<span class="token operator">=</span><span class="token boolean">false</span><span class="token operator"><</span><span class="token operator">/</span>property<span class="token operator">></span>
      <span class="token operator"><</span>property name<span class="token operator">=</span><span class="token string">"connection.username"</span><span class="token operator">></span>root<span class="token operator"><</span><span class="token operator">/</span>property<span class="token operator">></span>
      <span class="token operator"><</span>property name<span class="token operator">=</span><span class="token string">"connection.password"</span><span class="token operator">></span>root<span class="token operator"><</span><span class="token operator">/</span>property<span class="token operator">></span>
      <span class="token operator"><</span><span class="token operator">!</span><span class="token operator">--</span> JDBC connection pool settings <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span> using built<span class="token operator">-</span>in test pool <span class="token operator">--</span><span class="token operator">></span>
      <span class="token operator"><</span>property name<span class="token operator">=</span><span class="token string">"connection.pool_size"</span><span class="token operator">></span><span class="token number">1</span><span class="token operator"><</span><span class="token operator">/</span>property<span class="token operator">></span>
      <span class="token operator"><</span><span class="token operator">!</span><span class="token operator">--</span> <span class="token class-name">Echo</span> the SQL <span class="token keyword">to</span> <span class="token namespace">stdout</span> <span class="token operator">--</span><span class="token operator">></span>
      <span class="token operator"><</span>property name<span class="token operator">=</span><span class="token string">"show_sql"</span><span class="token operator">></span><span class="token boolean">true</span><span class="token operator"><</span><span class="token operator">/</span>property<span class="token operator">></span>
      <span class="token operator"><</span><span class="token operator">!</span><span class="token operator">--</span> <span class="token class-name">Select</span> our SQL dialect <span class="token operator">--</span><span class="token operator">></span>
      <span class="token operator"><</span>property name<span class="token operator">=</span><span class="token string">"dialect"</span><span class="token operator">></span><span class="token class-name"><span class="token namespace">org<span class="token punctuation">.</span>hibernate<span class="token punctuation">.</span>dialect<span class="token punctuation">.</span></span>MySQL5Dialect</span><span class="token operator"><</span><span class="token operator">/</span>property<span class="token operator">></span>
      <span class="token operator"><</span><span class="token operator">!</span><span class="token operator">--</span> <span class="token class-name">Drop</span> and re<span class="token operator">-</span>create the database schema on startup <span class="token operator">--</span><span class="token operator">></span>
      <span class="token operator"><</span>property name<span class="token operator">=</span><span class="token string">"hbm2ddl.auto"</span><span class="token operator">></span>create<span class="token operator">-</span>drop<span class="token operator"><</span><span class="token operator">/</span>property<span class="token operator">></span>
      <span class="token operator"><</span><span class="token operator">!</span><span class="token operator">--</span> name of annotated entity <span class="token keyword">class</span> <span class="token operator">--</span><span class="token operator">></span>
      <span class="token operator"><</span>mapping <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">"academy.company.Employee"</span><span class="token operator">/</span><span class="token operator">></span>
   <span class="token operator"><</span><span class="token operator">/</span>session<span class="token operator">-</span>factory<span class="token operator">></span>
<span class="token operator"><</span><span class="token operator">/</span>hibernate<span class="token operator">-</span>configuration<span class="token operator">></span>
</div>

Session factory manages the creation and lifecycle of the session. We require a session factory per database.

Session is used to create a connection/session with the database.

Here, create-drop will check if the table is already present, then it will first drop the table and will create a new table.

Dialect represents the MySQL version that we are using in the database.

Example

Before we run our java application, we just need to configure sessionfactory in Main.java as ?

<div class="code-mirror  language-java" contenteditable="plaintext-only" spellcheck="false" style="outline: none; overflow-wrap: break-word; overflow-y: auto; white-space: pre-wrap;"><span class="token keyword">package</span> <span class="token namespace">academy<span class="token punctuation">.</span>company</span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token namespace">org<span class="token punctuation">.</span>hibernate<span class="token punctuation">.</span></span><span class="token class-name">SessionFactory</span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token namespace">org<span class="token punctuation">.</span>hibernate<span class="token punctuation">.</span>cfg<span class="token punctuation">.</span></span><span class="token class-name">Configuration</span><span class="token punctuation">;</span>
<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Main</span> <span class="token punctuation">{</span>
    <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token class-name">SessionFactory</span> sessionFactory<span class="token punctuation">;</span>
        sessionFactory <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Configuration</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
            <span class="token punctuation">.</span><span class="token function">configure</span><span class="token punctuation">(</span><span class="token string">"academy/company/hibernate.cfg.xml"</span><span class="token punctuation">)</span>
            <span class="token punctuation">.</span><span class="token function">buildSessionFactory</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</div>

Now, when we start our java application we can see in the console that Hibernate will firstly drop the Employee table if it already exists. If not, it will create the Employee table with the attributes that we defined in our employee class.

Output

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
Updated on: 2022-08-26T11:28:09+05:30

10K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements