Entitymanager là gì

Views: 7.704

Trong bài viết này, như bài viết giới thiệu về Hibernate, không dài dòng, mình sẽ đi thẳng vào một ví dụ về JPA với implementation của Hibernate để các bạn có cái nhìn đầu tiên và hiểu cách mà JPA làm việc luôn các bạn nhé!

Đầu tiên, mình sẽ tạo một Maven project như sau:

Entitymanager là gì

Vì mình sẽ sử dụng JPA với implementation của Hibernate, do đó, mình sẽ thêm Hibernate dependencies như sau:

    org.hibernate

    hibernate-core

    5.2.12.Final

    org.hibernate

    hibernate-entitymanager

    5.2.12.Final

Mình cũng sẽ sử dụng MySQL database nên mình cũng sẽ thêm MySQL Driver dependency như sau:

    mysql

    mysql-connector-java

    6.0.6

Project Lombok:

    org.projectlombok

    lombok

    1.16.18

    provided

Trong ví dụ này, mình sẽ định nghĩa một database chứa thông tin của lớp học và những sinh viên của lớp học đó như sau:

CREATETABLE`clazz`(

  `id`int(11)NOT NULLAUTO_INCREMENT,

  `name`varchar(45)NOT NULL,

  PRIMARY KEY(`id`)

) ENGINE=InnoDBDEFAULTCHARSET=utf8;

CREATETABLE`students`(

  `id`int(11)NOT NULLAUTO_INCREMENT,

  `name`varchar(45)NOT NULL,

  `code`varchar(10)NOT NULL,

  `date_of_birth` datetimeDEFAULTNULL,

  `email`varchar(100)DEFAULTNULL,

  `clazz_id`int(11)NOT NULL,

  PRIMARY KEY(`id`),

  KEY `student_clazz_idx`(`clazz_id`),

  CONSTRAINT`student_clazz`FOREIGN KEY(`clazz_id`)REFERENCES`clazz`(`id`)ON DELETENOACTIONON UPDATENOACTION

) ENGINE=InnoDBDEFAULTCHARSET=utf8;

Các bước chuẩn bị đã xong, giờ chúng ta bắt đầu đi vào phần chính nhé các bạn.

Đầu tiên, để có thể thao tác với các bảng clazz và students trong database, chúng ta sẽ ánh xạ các bảng, các cột của những table này qua thành những Java object trước (ORM).

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

packagecom.huongdanjava.jpa;

importjavax.persistence.Column;

importjavax.persistence.Entity;

import javax.persistence.GeneratedValue;

importjavax.persistence.GenerationType;

importjavax.persistence.Id;

import javax.persistence.Table;

importlombok.Getter;

importlombok.Setter;

@Entity

@Table

@Getter

@Setter

publicclass Clazz{

    @Id

    @GeneratedValue(strategy=GenerationType.IDENTITY)

    privateLongid;

    @Column

    privateStringname;

}

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

28

29

30

31

32

33

34

35

36

37

38

39

packagecom.huongdanjava.jpa;

importjava.util.Date;

importjavax.persistence.Column;

import javax.persistence.Entity;

importjavax.persistence.GeneratedValue;

importjavax.persistence.GenerationType;

import javax.persistence.Id;

importjavax.persistence.Table;

importlombok.Getter;

importlombok.Setter;

@Entity

@Table

@Getter

@Setter

publicclassStudents{

    @Id

    @GeneratedValue(strategy=GenerationType.IDENTITY)

    private Longid;

    @Column

    privateStringname;

    @Column

    privateStringcode;

    @Column(name ="date_of_birth")

    privateDate dateOfBirth;

    @Column

    privateStringemail;

    @Column(name ="clazz_id")

    privateLongclazzId;

}

Tiếp theo chúng ta sẽ là tạo một tập tin cấu hình để làm việc với JPA.

Tập tin cấu hình này sẽ chứa thông tin của một hay nhiều persistence unit. Một persistence unit là một tập hợp chứa thông tin những Java object ánh xạ đến các cột các bảng trong database và thông tin về kết nối tới database, username, password. Ngoài ra, nó còn chứa một số thông tin cấu hình khác nữa.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

version="2.1"

xmlns="http://xmlns.jcp.org/xml/ns/persistence"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence_2_1.xsd">

name="jpaexample"transaction-type="RESOURCE_LOCAL">

com.huongdanjava.jpa.Clazz

com.huongdanjava.jpa.Students

true

name="javax.persistence.jdbc.driver"value="com.mysql.jdbc.Driver" />

name="javax.persistence.jdbc.url"value="jdbc:mysql://localhost:3306/jpa_example" />

name="javax.persistence.jdbc.user"value="root" />

name="javax.persistence.jdbc.password"value="123456" />

name="hibernate.format_sql"value="true" />

name="hibernate.use_sql_comments"value="true" />

Mình sẽ giải thích chi tiết những cấu hình này trong bài viết sau nhé các bạn.

Thông thường chúng ta đặt tên cho tập tin cấu hình này là persistence.xml và tập tin này sẽ được chứa trong thư mục /src/main/resources/META-INF của project.

Entitymanager là gì

OK, chúng ta đã cấu hình xong, vậy giờ làm thế nào để sử dụng những thông tin cấu hình đó.

Chúng ta sẽ dùng đối tượng Persistence của JPA để đọc những thông tin cấu hình đó lên và dùng đối tượng EntityManagerFactory để chứa chúng.

EntityManagerFactory emf=Persistence.createEntityManagerFactory("jpaexample");

Các bạn để ý là jpaexample chính là tên của persistence unit mà chúng ta đã khai báo trong tập tin cấu hình.

Và giờ chúng ta có thể sử dụng đối tượng EntityManagerFactory để làm việc rồi.

Để làm việc với JPA, chúng ta sẽ lấy một đối tượng EntityManager từ EntityManagerFactory.

EntityManager em=emf.createEntityManager();

Nếu các bạn cần thao tác có liên quan đến cập nhập database, chúng ta cần mở một transaction mới. Nếu không thì không cần mở transaction nhé các bạn. Ở đây, mình cần thêm mới một class, do đó mình sẽ mở một transaction như sau:

EntityTransaction transaction=em.getTransaction();

transaction.begin();

Ở đây, chúng ta sẽ thêm mới một record trong bảng clazz nên chúng ta sẽ khởi tạo mới đối tượng Clazz:

Clazz clazz=newClazz();

clazz.setName("Class A");

và dùng đối tượng EntityManager để lưu đối tượng Clazz này vào database:

em.persist(clazz);

transaction.commit();

Toàn bộ code 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

packagecom.huongdanjava.jpa;

importjavax.persistence.EntityManager;

importjavax.persistence.EntityManagerFactory;

import javax.persistence.EntityTransaction;

importjavax.persistence.Persistence;

publicclassApplication{

publicstaticvoid main(String[]args){

EntityManagerFactory emf=Persistence.createEntityManagerFactory("jpaexample");

EntityManager em= emf.createEntityManager();

EntityTransaction transaction=em.getTransaction();

transaction.begin();

Clazz clazz =newClazz();

clazz.setName("Class A");

em.persist(clazz);

transaction.commit();

}

}

Kết quả:

Entitymanager là gì