Hibernate và Spring framework – Hướng Dẫn Java

Mình đã giới thiệu với các bạn cơ bản về Hibernate và do đó các bạn cũng đã biết trong Hibernate đối tượng hiện thực interface SessionFactory sẽ là đối tượng nắm dữ các thông tin liên quan đến kết nối database, các entity để thao tác với database. Sẽ tốt hơn nếu đối tượng này được quản lý bởi Spring, khi nào chúng ta cần thì chúng ta có thể lấy ra để sử dụng ngay. Trong bài viết này, mình sẽ hướng dẫn các bạn cách sử dụng Hibernate trong Spring framework các bạn nhé!

Đầu tiên, mình sẽ tạo một Maven để làm ví dụ:

Hibernate và Spring framework

Spring dependency như sau:

1

2

3

4

5

<dependency>

    

<groupId>

org.springframework

</groupId>

    

<artifactId>

spring-context

</artifactId>

    

<version>

5.0.2.RELEASE

</version>

</dependency>

Để làm việc với Hibernate, giống như JPA, chúng ta cũng cần thêm spring-orm dependency nữa:

1

2

3

4

5

<dependency>

    

<groupId>

org.springframework

</groupId>

    

<artifactId>

spring-orm

</artifactId>

    

<version>

5.0.2.RELEASE

</version>

</dependency>

Hibernate dependency:

1

2

3

4

5

<dependency>

    

<groupId>

org.hibernate

</groupId>

    

<artifactId>

hibernate-core

</artifactId>

    

<version>

5.2.12.Final

</version>

</dependency>

Trong bài viết này, mình sẽ sử dụng MySQL database nên mình cũng sẽ thêm MySQL Driver dependency như sau:

1

2

3

4

5

<dependency>

    

<groupId>

mysql

</groupId>

    

<artifactId>

mysql-connector-java

</artifactId>

    

<version>

6.0.6

</version>

</dependency>

Project Lombok:

1

2

3

4

5

6

<dependency>

    

<groupId>

org.projectlombok

</groupId>

    

<artifactId>

lombok

</artifactId>

    

<version>

1.16.18

</version>

    

<scope>

provided

</scope>

</dependency>

Để đơn giản, trong ví dụ này, mình chỉ định nghĩa một table chứa thông tin sinh viên với 2 cột như sau:

1

2

3

4

5

CREATE

TABLE

`student`

(

  

`id`

bigint

(20)

NOT NULL

AUTO_INCREMENT

,

  

`name`

varchar

(50)

DEFAULT

NULL

,

  

PRIMARY KEY

(`id`)

)

ENGINE

=

InnoDB

AUTO_INCREMENT

=

2

DEFAULT

CHARSET

=

latin1;

Entity của table student có nội dung như sau:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

package

com

.

huongdanjava

.

springhibernate

;

 

import

lombok

.

Data

;

 

import

java

.

io

.

Serializable

;

 

import

javax

.

persistence

.

Column

;

import

javax

.

persistence

.

Entity

;

import

javax

.

persistence

.

GeneratedValue

;

import

javax

.

persistence

.

Id

;

import

javax

.

persistence

.

Table

;

 

@Table

(

name

=

“student”

)

@Entity

@Data

public

class

Student

implements

Serializable

{

 

    

private

static

final

long

serialVersionUID

=

1L

;

 

    

@Id

    

@GeneratedValue

    

private

Long

id

;

 

    

@Column

    

private

String

name

;

 

}

Đối với Hibernate, Spring 5 chỉ hỗ trợ chúng ta duy nhất một class để tạo đối tượng hiện thực interface SessionFactory đó là: LocalSessionFactoryBean.

Đối tượng này cho phép chúng ta khai báo các thông tin liên quan đến database, entity luôn nên chúng ta không cần phải có tập tin cấu hình cho Hibernate nữa các bạn nhé.

Dưới đây là các thông tin cần thiết mà các bạn cần phải khai báo cho đối tượng LocalSessionFactoryBean trong Spring container:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<bean

id

=

“sessionFactory”

class

=

“org.springframework.orm.hibernate5.LocalSessionFactoryBean”

>

    

<property

name

=

“dataSource”

ref

=

“dataSource”

/>

    

<property

name

=

“annotatedClasses”

>

        

<list>

            

<value>

com.huongdanjava.springhibernate.Student

</value>

        

</list>

    

</property>

    

<property

name

=

“hibernateProperties”

>

        

<props>

            

<prop

key

=

“hibernate.dialect”

>

org.hibernate.dialect.MySQLDialect

</prop>

            

<prop

key

=

“hibernate.show_sql”

>

true

</prop>

        

</props>

    

</property>

</bean>

Trong khai báo trên, như các bạn thấy, chúng ta có 3 thuộc tính của đối tượng LocalSessionFactoryBean cần phải khai báo:

Thuộc tính đầu tiên thì liên quan đến phần dataSource. DataSource ở đây chúng ta có thể hiểu nôm na là phần quản lý kết nối tới database. Chúng ta có thể khai báo nhiều loại DataSource khác nhau do nhiều tổ chức khác nhau implement interface javax.sql.DataSource.

Ở đây mình khai báo phần DataSource sử dụng đối tượng DriverManagerDataSource như sau:

1

2

3

4

5

6

<bean

id

=

“dataSource”

class

=

“org.springframework.jdbc.datasource.DriverManagerDataSource”

>

    

<property

name

=

“driverClassName”

value

=

“com.mysql.cj.jdbc.Driver”

/>

    

<property

name

=

“url”

value

=

“jdbc:mysql://localhost:3306/spring_hibernate”

/>

    

<property

name

=

“username”

value

=

“root”

/>

    

<property

name

=

“password”

value

=

“123456”

/>

</bean>

Thuộc tính thứ 2 chúng ta cần khai báo đó là các thông tin liên quan đến entity. Trong bài viết này, mình chỉ định nghĩa một entity duy nhất là Student.

Thuộc tính cuối cùng là một số thuộc tính liên quan đến Hibernate. Chúng ta sẽ sử dụng dialect của MySQL, MySQLDialect và sẽ hiển thị câu SQL mà Hibernate dùng để execute database.

Vậy là chúng ta đã hoàn thành việc khai báo đối tượng hiện thực interface SessionFactory trong Spring container rồi, sử dụng nó thôi 😀

Ví dụ của mình như sau:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

package

com

.

huongdanjava

.

springhibernate

;

 

import

org

.

hibernate

.

Session

;

import

org

.

hibernate

.

SessionFactory

;

import

org

.

hibernate

.

query

.

Query

;

import

org

.

springframework

.

context

.

ApplicationContext

;

import

org

.

springframework

.

context

.

support

.

ClassPathXmlApplicationContext

;

 

import

javax

.

persistence

.

EntityManager

;

import

javax

.

persistence

.

EntityManagerFactory

;

import

java

.

util

.

List

;

 

public

class

Application

{

 

    

public

static

void

main

(

String

[

]

args

)

{

        

ApplicationContext

ac

=

new

ClassPathXmlApplicationContext

(

“spring.xml”

)

;

        

SessionFactory

sf

=

(

SessionFactory

)

ac

.

getBean

(

“sessionFactory”

)

;

        

Session

session

=

sf

.

openSession

(

)

;

 

        

Query

<Student>

q

=

session

.

createQuery

(

“From Student “

)

;

 

        

List

<Student>

resultList

=

q

.

list

(

)

;

        

for

(

Student

next

:

resultList

)

{

            

System

.

out

.

println

(

“Student name: “

+

next

.

getName

(

)

)

;

        

}

    

}

}

Hiện tại trong database của mình đang có những dữ liệu sau đây:

Hibernate và Spring framework

thì khi chạy kết quả sẽ là:

Hibernate và Spring framework

3/5 – (4 bình chọn)