Đầu tiên, mình sẽ tạo mới một Maven project để làm ví dụ :
Bạn đang đọc: Tổng quan về Spring Data JPA – Hướng Dẫn Java
Spring Data JPA dependency :
12345 |
org.springframework.data |
spring-data-jpa
2.0.3. RELEASE
Ở đây, mình sẽ sử dụng JPA với implementation của Hibernate nên mình sẽ thêm Hibernate dependency như sau :
12345 |
org.hibernate |
hibernate-core
5.2.12. Final
Project Lombok :
123456 |
org.projectlombok |
lombok
1.16.20
provided
Trong bài viết này, mình sẽ sử dụng MySQL database :
12345 |
mysql |
mysql-connector-java
6.0.6
Để đơn thuần, mình chỉ định nghĩa 1 table chứa thông tin sinh viên với 2 cột như sau :
12345 |
CREATETABLE`student`( `id`bigint(20)NOT NULLAUTO_INCREMENT, `name`varchar(50)DEFAULTNULL, PRIMARY KEY(`id`) )ENGINE=InnoDBAUTO_INCREMENT=2DEFAULTCHARSET=latin1; |
Entity của table này :
1234567891011121314151617181920212223242526272829 |
packagecom.huongdanjava.springdatajpa; importjava.io.Serializable; importjavax.persistence.Column; importjavax.persistence.Entity; importjavax.persistence.GeneratedValue; importjavax.persistence.Table; importorg.springframework.data.annotation.Id; importlombok.Getter; importlombok.Setter; @ Table(name=” student “) @ Entity @ Getter @ Setter publicclassStudentimplementsSerializable{ privatestaticfinallongserialVersionUID=1L; @ Id @ GeneratedValue privateLongid; @ Column privateStringname; } |
Để thao tác với JPA, tất cả chúng ta cần có một tập tin thông số kỹ thuật persistence.xml cho nó. Các bạn hãy tạo mới tập tin persistence.xml nằm trong thư mục / src / main / resources / META-INF những bạn nhé !
Nội dung của tập tin này như sau :
123456789101112131415161718 |
xmlversion=” 1.0 “encoding=” UTF-8 “standalone=” no “? >
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/persistence_2_1.xsd “>
org.hibernate.jpa. HibernatePersistenceProvider |
com.huongdanjava.springdatajpa. Student
Khai báo EntityManagerFactory trong Spring container :
1234567 |
|
với datasource :
123456 |
|
OK, vậy là đã sẵn sàng chuẩn bị mọi thứ xong rồi đó những bạn :
Các bạn hoàn toàn có thể tìm hiểu thêm thêm bài viết về JPA và Spring framework tại đây nhé !
Giờ tất cả chúng ta đi vào chủ đề chính của bài viết này thôi .
Điều tiên phong, những bạn cần phải biết là Spring Data JPA là một module nhỏ trong một project lớn gọi là Spring Data project. Mục đích của Spring Data project là giảm thiểu những đoạn code lặp đi lặp lại tương quan đến phần thao tác với những mạng lưới hệ thống quản trị data khi tăng trưởng những ứng dụng có sử dụng Spring framework. Ngoài Spring Data JPA tương hỗ cho JPA giảm thiểu code để truy vấn và thao tác với những mạng lưới hệ thống quản trị cơ cở tài liệu, tất cả chúng ta còn có Spring Data JDBC ( cũng giống như Spring Data JPA ), Spring Data LDAP ( tương hỗ Spring LDAP ), Spring Data MongoDB ( tương hỗ cho MongoDB ), … Các bạn hoàn toàn có thể tìm thấy vừa đủ những module của Spring Data tại đây .
Để đạt được mục tiêu giảm thiểu code như mình đã nói, Spring Data định nghĩa một interface chính tên là Repository nằm trong module Spring Data Common, module này sẽ được sử dụng cho tổng thể những module còn lại trong Spring Data project. Nội dung của interface này đơn thuần như sau :
12345678 |
packageorg.springframework.data.repository; importorg.springframework.stereotype.Indexed; @ Indexed publicinterfaceRepository } |
Interface này sử dụng 2 generic type :
- T là domain class mà repository sẽ quản lý
- ID là kiểu dữ liệu của ID của domain class mà repository quản lý.
Vì interface này đơn thuần như vậy nên chắc như đinh nó phải có những interface khác extend nó để biểu lộ Spring Data project làm được những gì phải không những bạn ? 😀
Ở đây, tất cả chúng ta sẽ có nhiều interface khác extend từ interface repository tuỳ thuộc vào module mà tất cả chúng ta sử dụng nhưng do tất cả chúng ta đang bàn luận về Spring Data JPA nên mình sẽ chỉ liệt kê ở đây một interface duy nhất extend interface Repository mà Spring Data JPA đang sử dụng. Đó chính là interface CrudRepository .
Interface CrudRepository với ý nghĩa create, read, update, delete được cho phép tất cả chúng ta thực thi những thao tác cơ bản đến với những mạng lưới hệ thống data, mạng lưới hệ thống data ở đây những bạn phải hiểu theo nghĩa rộng nghĩa là nó không chỉ là database đâu nhé những bạn .
Để tương hỗ việc phân trang và sắp xếp cho Spring Data JPA, tất cả chúng ta còn phải nói đến một interface khác là PagingAndSortingRepository .
Tất cả những interface mà mình vừa kể trên đều nằm trong module Spring Data Common nhé những bạn .
Trong Spring Data JPA, ở đây, tất cả chúng ta chỉ có duy nhất một interface là JpaRepository thừa kế interface PagingAndSortingRepository. Với việc extend từ interface PagingAndSortingRepository, những bạn cũng hoàn toàn có thể tưởng tượng là Spring Data JPA hoàn toàn có thể giúp tất cả chúng ta giảm thiểu code cho những thao tác nào tương quan đến database rồi phải không những bạn ? Có thể kể ra đây là : create, read, update, delete, paging và sort. 😀
Các bạn hoàn toàn có thể thấy rõ cấu trúc extend cho những interface trên bằng hình ảnh sau :
OK, vậy giờ hãy cùng mình làm một ví dụ với interface JpaRepository xem nó hoạt động giải trí như thế nào nhé những bạn .
Bây giờ mình sẽ tạo mới một interface tên là HelloRepository extend từ Jpa Repository với nội dung như sau :
1234567 |
packagecom.huongdanjava.springdatajpa; importorg.springframework.data.jpa.repository.JpaRepository; publicinterfaceHelloRepositoryextendsJpaRepository } |
Domain class ở đây chính là tên entity Student còn Long chính là kiểu tài liệu của properties trong entity Student mapping với column primary key trong table student nha những bạn .
Giờ tất cả chúng ta sẽ khai báo interface này trong Spring container như sau :
123456789101112131415161718192021222324 |
xmlns:xsi=” http://www.w3.org/2001/XMLSchema-instance “ xmlns:jpa=” http://www.springframework.org/schema/data/jpa “ xsi:schemaLocation=” http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd “>
|
Ở đây, mình sử dụng namespace jpa : repositories với base package là com.huongdanjava.springdatajpa để scan HelloRepository interface. Với khai báo như trên, Spring Data JPA sẽ tự động hóa lấy đối tượng người tiêu dùng implement tự động hóa cho interface HelloRepository là SimpleJpaRepository như những bạn thấy trong hình ảnh ở trên để khởi tạo trong Spring container .
Vì đối tượng người tiêu dùng implement SimpleJpaRepository sử dụng transaction nên những bạn cần phải khai báo thêm bean transactionManager vào Spring container những bạn nhé .
1234567891011121314151617181920212223242526272829303132 |
xmlns:xsi=” http://www.w3.org/2001/XMLSchema-instance “ xmlns:jpa=” http://www.springframework.org/schema/data/jpa “ xmlns:tx=” http://www.springframework.org/schema/tx “ xsi:schemaLocation=” http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd “>
|
OK, đến đây là tất cả chúng ta đã hoàn thành xong những phần thông số kỹ thuật thiết yếu. Giờ chạy ví dụ thử nhé những bạn .
Giả sử trong database mình đang có những tài liệu sau đây :
thì khi chạy ví dụ sau đây :
12345678910111213141516 |
packagecom.huongdanjava.springdatajpa; importorg.springframework.context.ApplicationContext; importorg.springframework.context.tư vấn.ClassPathXmlApplicationContext; publicclassApplication{ publicstaticvoidmain(String[]args){ ApplicationContextac=newClassPathXmlApplicationContext(” spring.xml “); HelloRepositoryhelloRepository=(HelloRepository)ac.getBean(” helloRepository “); Studentstudent=helloRepository.findById(newLong(2)).get(); System.out.println(student.getName()); } } |
Kết quả sẽ là :
Giả sử giờ tất cả chúng ta thêm một phương pháp trong interface HelloRepository có nội dung như sau :
123456789 |
packagecom.huongdanjava.springdatajpa; importorg.springframework.data.jpa.repository.JpaRepository; publicinterfaceHelloRepositoryextendsJpaRepository publicStudentfindByName(Stringname); } |
thì khi chạy ví dụ sau :
1234567891011121314151617 |
packagecom.huongdanjava.springdatajpa; importorg.springframework.context.ApplicationContext; importorg.springframework.context.tư vấn.ClassPathXmlApplicationContext; publicclassApplication{ publicstaticvoidmain(String[]args){ ApplicationContextac=newClassPathXmlApplicationContext(” spring.xml “); HelloRepositoryhelloRepository=(HelloRepository)ac.getBean(” helloRepository “); Studentstudent=helloRepository.findByName(” Phong “); System.out.println(student.getId()); } } |
hiệu quả sẽ là :
Như những bạn thấy, mặc dầu không có bất kể class nào implement interface HelloRepository nhưng tất cả chúng ta vẫn truy vấn table student theo column name được. Giảm được rất nhiều code mà tất cả chúng ta cần phải làm phải không những bạn ?
Xem thêm: Nhân CPU, luồng CPU là gì? Nên chọn máy tính có bao nhiêu nhân, luồng? – https://swing.com.vn
4/5 – ( 4 bầu chọn )
Source: https://swing.com.vn
Category: Wiki