Cơ Bản Về JPA - Hướng Dẫn Java

Views: 9.359

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:

Cơ bản về JPA

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

XHTML <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.2.12.Final</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>5.2.12.Final</version> </dependency>
12345678910 <dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.2.12.Final</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>5.2.12.Final</version></dependency>

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

XHTML <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>6.0.6</version> </dependency>
12345 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>6.0.6</version></dependency>

Project Lombok:

XHTML <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.18</version> <scope>provided</scope> </dependency>
123456 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.18</version><scope>provided</scope></dependency>

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:

MySQL CREATE TABLE `clazz` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(45) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
12345 CREATETABLE`clazz`(`id`int(11)NOT NULLAUTO_INCREMENT,`name`varchar(45)NOT NULL,PRIMARY KEY(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8;
MySQL CREATE TABLE `students` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(45) NOT NULL, `code` varchar(10) NOT NULL, `date_of_birth` datetime DEFAULT NULL, `email` varchar(100) DEFAULT NULL, `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 DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1234567891011 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).

Java package com.huongdanjava.jpa; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import lombok.Getter; import lombok.Setter; @Entity @Table @Getter @Setter public class Clazz { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column private String name; }
12345678910111213141516171819202122232425 packagecom.huongdanjava.jpa; importjavax.persistence.Column;importjavax.persistence.Entity;importjavax.persistence.GeneratedValue;importjavax.persistence.GenerationType;importjavax.persistence.Id;importjavax.persistence.Table; importlombok.Getter;importlombok.Setter; @Entity@Table@Getter@SetterpublicclassClazz{ @Id@GeneratedValue(strategy=GenerationType.IDENTITY)privateLongid; @ColumnprivateStringname;}
Java package com.huongdanjava.jpa; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import lombok.Getter; import lombok.Setter; @Entity @Table @Getter @Setter public class Students { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column private String name; @Column private String code; @Column(name = "date_of_birth") private Date dateOfBirth; @Column private String email; @Column(name = "clazz_id") private Long clazzId; }
123456789101112131415161718192021222324252627282930313233343536373839 packagecom.huongdanjava.jpa; importjava.util.Date; importjavax.persistence.Column;importjavax.persistence.Entity;importjavax.persistence.GeneratedValue;importjavax.persistence.GenerationType;importjavax.persistence.Id;importjavax.persistence.Table; importlombok.Getter;importlombok.Setter; @Entity@Table@Getter@SetterpublicclassStudents{ @Id@GeneratedValue(strategy=GenerationType.IDENTITY)privateLongid; @ColumnprivateStringname; @ColumnprivateStringcode; @Column(name="date_of_birth")privateDate dateOfBirth; @ColumnprivateStringemail; @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.

XHTML <persistence 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"> <persistence-unit name="jpaexample" transaction-type="RESOURCE_LOCAL"> <class>com.huongdanjava.jpa.Clazz</class> <class>com.huongdanjava.jpa.Students</class> <exclude-unlisted-classes>true</exclude-unlisted-classes> <properties> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jpa_example" /> <property name="javax.persistence.jdbc.user" value="root" /> <property name="javax.persistence.jdbc.password" value="123456" /> <property name="hibernate.format_sql" value="true" /> <property name="hibernate.use_sql_comments" value="true" /> </properties> </persistence-unit> </persistence>
1234567891011121314151617181920 <persistence 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"> <persistence-unit name="jpaexample"transaction-type="RESOURCE_LOCAL"><class>com.huongdanjava.jpa.Clazz</class><class>com.huongdanjava.jpa.Students</class><exclude-unlisted-classes>true</exclude-unlisted-classes> <properties><property name="javax.persistence.jdbc.driver"value="com.mysql.jdbc.Driver" /><property name="javax.persistence.jdbc.url"value="jdbc:mysql://localhost:3306/jpa_example" /><property name="javax.persistence.jdbc.user"value="root" /><property name="javax.persistence.jdbc.password"value="123456" /> <property name="hibernate.format_sql"value="true" /><property name="hibernate.use_sql_comments"value="true" /></properties></persistence-unit></persistence>

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.

Cơ bản về JPA

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.

Java EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpaexample");
1 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.

Java EntityManager em = emf.createEntityManager();
1 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:

Java EntityTransaction transaction = em.getTransaction(); transaction.begin();
12 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:

Java Clazz clazz = new Clazz(); clazz.setName("Class A");
12 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:

Java em.persist(clazz); transaction.commit();
12 em.persist(clazz);transaction.commit();

Toàn bộ code như sau:

Java package com.huongdanjava.jpa; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; public class Application { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpaexample"); EntityManager em = emf.createEntityManager(); EntityTransaction transaction = em.getTransaction(); transaction.begin(); Clazz clazz = new Clazz(); clazz.setName("Class A"); em.persist(clazz); transaction.commit(); } }
1234567891011121314151617181920212223 packagecom.huongdanjava.jpa; importjavax.persistence.EntityManager;importjavax.persistence.EntityManagerFactory;importjavax.persistence.EntityTransaction;importjavax.persistence.Persistence; publicclassApplication{ publicstaticvoidmain(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ả:

Cơ bản về JPA

3.7/5 - (3 bình chọn)

Từ khóa » Tìm Hiểu Về Jpa