-
Design Pattern
- Singleton Design Pattern
- Factory Design Pattern
- Factory Method Design Pattern
- Abstract Factory Design Pattern
- Builder Design Pattern
- Prototype Design Pattern
- Object Pool Design Pattern
- Chain of Responsibility Design Pattern
- Command Design Pattern
- Interpreter Design Pattern
- Iterator Design Pattern
- Mediator Design Pattern
- Memento Design Pattern
- Observer Design Pattern
- Observer Design Pattern - Xử Lý Exception
- Strategy Design Pattern
- Template Method Design Pattern
- Visitor Design Pattern
- Null Object Design Pattern
- Adapter Design Pattern
- Bridge Design Pattern
- Composite Design Pattern
- Decorator Design Pattern
- Flyweight Design Pattern
- Proxy Design Pattern
- S.O.L.I.D
- Clean code
- Lập trình socket
- Java Core
- Multi-Thread
- Spring
- Java Web
- Memory Caching
- Message Queue
- DevOps
- Xây dựng một nền tảng
- MongoDB
- MySQL timestamp
- Properties vs yaml
- Kotlin
- Lập Trình Machine Learning với PyTorch
- Mã Nguồn Mở
- Ezy HTTP
- Free Chat
- Một số kinh nghiệm với Git
- Review cho đồng nghiệp!
- Setup Dev Environment
- Hello World
- Create a Server Project
- Handle Client Requests
- Using ezyfox-server-csharp-client
- Using ezyfox-es6-client
- Client React.js Interaction
- Build And Deploy In Local
Tổng quan
Có lẽ chúng ta đã quá quen thuộc với cơ sở dữ liệu rồi nhỉ? Hầu hết các dự đều sẽ xoay quanh các nghiệp vụ CRUD (Create/Read/Update/Delete), chính vì vậy mà Spring JPA cũng đã hỗ trợ cho chúng ta tương đối tốt, chúng ta sẽ chỉ cần khai báo các interface và các query tương ứng với các hàm việc còn lại Spring sẽ lo giúp chúng ta.
Để điều này thì Spring cần sử dụng bridge design pattern kết hợp với Java Just In Time (sử dụng thư viện byte buddy). Phần chúng ta nhìn thấy sẽ là các repository interface, phần spring cài đặt sẽ gọi đến 1 framework ORM nào đó, ví dụ là Hibernate. Các thư viện ORM cũng sẽ lại tiếp tục gọi đến các thư viện Connection Pool và thông qua JDBC và database driver để gọi đến Database.
Cài đặt
Để sử dụng được Spring JPA, chúng ta sẽ cần add dependecies vào project của chúng ta, ví dụ với gradle:
implementation 'mysql:mysql-connector-java:' + mysqlConnectorVersion
implementation 'org.springframework.boot:spring-boot-starter:' + springBootVersion
implementation 'org.springframework.boot:spring-boot-starter-data-jpa:' + springBootVersion
Ngoài ra chúng ta cũng cần cấu hình data source url, ví dụ với file application.properties
:
spring.datasource.url=jdbc:mysql://root:12345678@localhost:3306/test
Ví dụ
Giả sử chúng ta cần quản lý tác giả sách, và chúng ta cần làm việc với cơ sở dữ liệu là SQL (ví dụ MySQL), chúng ta sẽ cần tạo 1 lớp data tương ứng với bảng trong cơ sở dữ liệu, ví dụ:
package com.tvd12.example.spring_webflux_jpa.entity;
import lombok.*;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.time.LocalDateTime;
@Getter
@Setter
@Entity(name = "author")
@AllArgsConstructor
@NoArgsConstructor
public class Author {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String name;
private LocalDateTime createdTime;
private LocalDateTime updatedTime;
}
Bây giờ chúng ta sẽ chỉ cần tạo ra AuthorRepository
interface nữa là xong:
package com.tvd12.example.spring_webflux_jpa.repository;
import com.tvd12.example.spring_webflux_jpa.entity.Author;
import org.springframework.data.jpa.repository.JpaRepository;
public interface AuthorRepository extends JpaRepository<Author, Long> {}
Bây giờ Spring đã toạ AuthorRepository
bean (singleton) cho chúng ta, và chúng ta có thể sử dụng nó ở bất cứ đâu trong chương trình giống như 1 bean bình thường, ví dụ:
@RestController
@RequestMapping("/api/v1")
@AllArgsConstructor
public class AuthorController {
private final AuthorRepository authorRepository;
@PostMapping("/author/add")
public Mono<AddAuthorResponse> authorsAddPost(
@RequestBody AddAuthorRequest request
) {
Author author = new Author();
...
Author saved = authorRepository.save(author);
}
Ví dụ đầy đủ bạn có thể tham khảo tại Github Repo.
-
Design Pattern
- Singleton Design Pattern
- Factory Design Pattern
- Factory Method Design Pattern
- Abstract Factory Design Pattern
- Builder Design Pattern
- Prototype Design Pattern
- Object Pool Design Pattern
- Chain of Responsibility Design Pattern
- Command Design Pattern
- Interpreter Design Pattern
- Iterator Design Pattern
- Mediator Design Pattern
- Memento Design Pattern
- Observer Design Pattern
- Observer Design Pattern - Xử Lý Exception
- Strategy Design Pattern
- Template Method Design Pattern
- Visitor Design Pattern
- Null Object Design Pattern
- Adapter Design Pattern
- Bridge Design Pattern
- Composite Design Pattern
- Decorator Design Pattern
- Flyweight Design Pattern
- Proxy Design Pattern
- S.O.L.I.D
- Clean code
- Lập trình socket
- Java Core
- Multi-Thread
- Spring
- Java Web
- Memory Caching
- Message Queue
- DevOps
- Xây dựng một nền tảng
- MongoDB
- MySQL timestamp
- Properties vs yaml
- Kotlin
- Lập Trình Machine Learning với PyTorch
- Mã Nguồn Mở
- Ezy HTTP
- Free Chat
- Một số kinh nghiệm với Git
- Review cho đồng nghiệp!
- Setup Dev Environment
- Hello World
- Create a Server Project
- Handle Client Requests
- Using ezyfox-server-csharp-client
- Using ezyfox-es6-client
- Client React.js Interaction
- Build And Deploy In Local