SPRING BOOT
Cách sử dụng Spring Scheduled trong Spring Boot Hướng dẫn CRUD với Spring Boot, REST và AngularJS trong Java Hướng dẫn Upload file với Spring Boot trong Java Hướng dẫn download file với Spring Boot trong Java Hướng dẫn Upload file với Spring Boot và jQuery Ajax trong Java Spring Boot là gì? Tại sao sử dụng Spring Boot trong Java Cài đặt Spring Boot trong Java, code một project Spring Boot cơ bản RESTful API là gì? Cách hoạt động của RESTful API trong Spring Boot RESTful API hoạt động qua giao thức HTTP như thế nào? CRUD đơn giản với RESTful API trong Spring Boot Java Các thuộc tính của Spring Boot trong Java Hướng dẫn sử dụng Thymeleaf và Spring Boot trong Java Hướng dẫn sử dụng FreeMarker với Spring Boot trong Java Hướng dẫn sử dụng JSP và Spring Boot trong Java Cách dùng Logging trong Spring Boot Kiến trúc 3layer trong Spring Boot là gì? Cách hoạt động thế nào? Hướng dẫn sử dụng Apache Tiles với Spring Boot trong Java Sử dụng nhiều ViewResolver trong Spring Boot Java Giới thiệu về Spring Boot Actuator trong ứng dụng Spring Boot Cách dùng Spring JDBC trong ứng dụng Spring Boot Java Spring Data JPA trong Spring Boot là gì? Spring Data JPA có gì hay? Tương tác giữa Spring Boot, JPA và cơ sở dữ liệu H2 Cách dùng Spring Email trong Spring Boot Sử dụng @bean trong ứng dụng Spring Boot Cách chuyển HTTP sang HTTPS trong Spring Boot Bảo mật Spring Boot RESTful Service sử dụng Basic Authentication trong Java Cách dùng Spring Security trong Spring Boot để xác thực và phân quyền Cách triển khai Spring Boot trên Tomcat Server Sử dụng JUnit để tạo unit test trong Spring Boot Cách test RESTful API trong Spring Boot Tạo ứng dụng Chat với Spring Boot và Websocket Tạo trang web đa ngôn ngữ với Spring Boot trong Java Sử dụng Twitter Bootstrap trong Spring Boot Hướng dẫn sử dụng Interceptor trong Spring Boot Cách tạo Restful Client bằng RestTemplate trong Spring Boot Cách dùng Spring Boot và MongoDB trong Java Cách dùng Spring Boot và Mustache trong Java Cách dùng Groovy trong Spring Boot Java
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Tương tác giữa Spring Boot, JPA và cơ sở dữ liệu H2

Với sự kết hợp giữa Spring Boot, JPA và cơ sở dữ liệu H2, chúng ta sẽ khám phá các công nghệ mới nhất và những cách tiếp cận tiên tiến nhất để tạo ra các ứng dụng web đáp ứng nhu cầu ngày càng cao của người dùng.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Trong bài viết này, chúng ta sẽ tìm hiểu cách kết hợp Spring Boot, JPA và cơ sở dữ liệu H2 để xây dựng một ứng dụng web hoàn chỉnh. Chúng ta sẽ đi từ những khái niệm cơ bản nhất, các bước thiết lập kết nối, đến các thao tác CRUD đơn giản. Bài viết sẽ cung cấp cho bạn những kiến thức cần thiết để xây dựng một ứng dụng web hiệu quả và dễ bảo trì.

1. Giới thiệu về Spring Boot, JPA và cơ sở dữ liệu H2

Giới thiệu về Spring Boot

Các bạn có thể xem lại kiến thức về Spring Boot bài viết trước của chúng mình nhé!!

Giới thiệu về JPA

Khái niệm: JPA (Java Persistence API) là một tiêu chuẩn của Java để quản lý truy cập cơ sở dữ liệu quan hệ. Nó cho phép người phát triển tạo và thao tác với các đối tượng Java mà không cần phải viết các truy vấn SQL trực tiếp.

Bài viết này được đăng tại [free tuts .net]

Tính năng: JPA có các tính năng chính sau:

  • Cung cấp một API đơn giản để quản lý truy cập cơ sở dữ liệu quan hệ.
  • Cho phép định nghĩa các đối tượng Java và ánh xạ chúng với các bảng trong cơ sở dữ liệu.
  • Cung cấp một cách để thực hiện các truy vấn phức tạp và động với cơ sở dữ liệu.

Ứng dụng: JPA được sử dụng rộng rãi trong các ứng dụng Java để thao tác với cơ sở dữ liệu quan hệ. Nó cung cấp một cách tiện lợi để quản lý dữ liệu và làm giảm thời gian và công sức cần thiết để viết các truy vấn SQL trực tiếp. JPA cũng có thể được sử dụng để tạo các ứng dụng web và các ứng dụng di động phức tạp.

Giới thiệu về cơ sở dữ liệu H2

Khái niệm: H2 là một hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) mã nguồn mở được viết bằng Java. Nó hỗ trợ các tính năng của cơ sở dữ liệu quan hệ tiêu chuẩn như SQL, JDBC và ODBC, và có thể được sử dụng như một cơ sở dữ liệu trên máy tính cá nhân hoặc máy chủ.

Tính năng: H2 có các tính năng chính sau:

  • Tốc độ nhanh và hiệu suất cao.
  • Hỗ trợ đa nền tảng, có thể chạy trên nhiều hệ điều hành khác nhau như Windows, Linux và Mac OS.
  • Cung cấp một công cụ trực quan để quản lý cơ sở dữ liệu và truy vấn.
  • Hỗ trợ nhiều tính năng như mã hóa, giao dịch, cơ chế khóa, tự động sao lưu và phục hồi.

Ứng dụng: H2 được sử dụng rộng rãi trong các ứng dụng Java và các dự án phát triển phần mềm do tính đơn giản và hiệu suất cao của nó. Nó thường được sử dụng trong các ứng dụng web, các ứng dụng máy tính cá nhân và các ứng dụng di động. Ngoài ra, H2 cũng có thể được sử dụng trong môi trường phát triển để thử nghiệm và kiểm tra các tính năng của ứng dụng trước khi triển khai.

2. Tạo một ứng dụng Spring Boot kết nối với cơ sở dữ liệu H2

Cài đặt và cấu hình môi trường phát triển

Đầu tiên mình sẽ hướng dẫn cho các bạn các bước để cài đặt và cấu hình môi trường phát triển của ứng dụng nhé!

Bước 1: Cài đặt Spring Tool Suite (STS):

Spring Tool Suite là một IDE (Integrated Development Environment) được phát triển dựa trên Eclipse và được sử dụng rộng rãi trong cộng đồng phát triển Spring. Bạn có thể tải STS từ trang web chính thức của Spring và cài đặt nó trên máy tính của mình.

Vào Eclipse => Help => Eclipse Marketplace.

B1 png

Sau đó thực hiện tìm kiếm STS và Install vào.

Bước 2: Cài đặt H2

Bạn có thể tải H2 Database từ trang web chính thức và cài đặt nó trên máy tính của mình.

Nếu bạn đang sử dụng Spring Boot, bạn có thể sử dụng tính năng tích hợp cơ sở dữ liệu H2 bằng cách thêm phụ thuộc spring-boot-starter-data-jpa vào tệp pom.xml của ứng dụng.

Bước 3: Tạo ứng dụng Spring Boot:

Để tạo ứng dụng Spring Boot, bạn có thể sử dụng Spring Initializr hoặc tạo một dự án mới trong STS như các bước đã làm như những dự án trong các bài trước mình đã hướng dẫn.

Lưu ý khi cấu hình project bạn sẽ phải chọn 4 công nghệ là JPA, H2, Thymeleaf, Web như hình dưới đây:

b2 png

Nếu bạn sử dụng Spring Initializr, hãy chọn phụ thuộc spring-boot-starter-data-jpaspring-boot-starter-web.

Tạo một cơ sở dữ liệu H2 trên ứng dụng Spring Boot

Sau khi thực hiện tạo dự án Spring Boot thì tiếp tục chúng ta sẽ cấu hình kết nối với cơ sở dữ liệu H2.

Bạn cần cấu hình kết nối với cơ sở dữ liệu H2. Để làm điều này, bạn cần chỉnh sửa tệp application.properties trong thư mục src/main/resources của ứng dụng. Bạn có thể thêm các thông tin kết nối như sau:

spring.datasource.url=jdbc:h2:~/test
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=

Trong đó:

  • url: là đường dẫn đến cơ sở dữ liệu H2. Trong ví dụ này, cơ sở dữ liệu được lưu trữ trong thư mục ~/test trên máy tính.
  • driverClassName: là tên lớp trình điều khiển JDBC của H2.
  • username: là tên đăng nhập của người dùng kết nối đến cơ sở dữ liệu.
  • password: là mật khẩu của người dùng kết nối đến cơ sở dữ liệu.

Sử dụng JPA để tạo các entity và quản lý truy vấn dữ liệu

Sau khi cấu hình kết nối với cơ sở dữ liệu H2, bạn có thể sử dụng JPA (Java Persistence API) để thao tác với cơ sở dữ liệu trong ứng dụng Spring Boot của mình.

Định nghĩa các đối tượng Entity: Để sử dụng JPA, bạn cần định nghĩa các đối tượng Entity trong ứng dụng của mình. Entity là một lớp đại diện cho một bảng trong cơ sở dữ liệu.

Ví dụ, nếu bạn có một bảng trong cơ sở dữ liệu H2 với tên là "users", bạn có thể định nghĩa một đối tượng User Entity trong ứng dụng của mình như sau:

@Entity
@Table(name = "users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(name = "username")
    private String username;

    @Column(name = "password")
    private String password;

    // getters and setters
}

Trong đó:

  • @Entity: đánh dấu lớp là một đối tượng Entity.
  • @Table: đánh dấu bảng tương ứng với đối tượng Entity.
  • @Id: đánh dấu thuộc tính là khóa chính của bảng.
  • @GeneratedValue: xác định cách tạo giá trị khóa chính tự động.
  • @Column: đánh dấu thuộc tính tương ứng với một cột trong bảng.

Sử dụng Repository: Sau khi định nghĩa các đối tượng Entity, bạn có thể sử dụng Repository để thao tác với cơ sở dữ liệu. Repository là một interface đại diện cho một bảng trong cơ sở dữ liệu và cung cấp các phương thức để thực hiện các thao tác cơ bản như thêm, sửa, xóa và truy vấn dữ liệu.

Ví dụ, nếu bạn muốn thao tác với bảng "users", bạn có thể định nghĩa một UserRepository như sau:

public interface UserRepository extends JpaRepository<User, Long> {
}

Trong đó:

  • JpaRepository: là một interface của Spring Data JPA cung cấp các phương thức thao tác với cơ sở dữ liệu.
  • User: là đối tượng Entity tương ứng với bảng "users".
  • Long: là kiểu dữ liệu của khóa chính trong bảng.

Sử dụng Service: Bạn có thể sử dụng Service để cài đặt các phương thức nghiệp vụ của ứng dụng. Service là một lớp trung gian giữa Repository và Controller và cung cấp các phương thức để thực hiện các tác vụ nghiệp vụ như đăng ký người dùng, đăng nhập, thêm, sửa, xóa, lấy thông tin người dùng, v.v.

Ví dụ, nếu bạn muốn thêm một phương thức đăng ký người dùng, bạn có thể định nghĩa một UserService như sau:

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public User createUser(User user) {
        return userRepository.save(user);
    }

    public User updateUser(User user) {
        return userRepository.save(user);
    }

    public void deleteUser(Long id) {
        userRepository.deleteById(id);
    }

    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }

    public List<User> getAllUsers() {
        return userRepository.findAll();
    }
}

Trong đó:

  • @Service: đánh dấu lớp là một Service.
  • @Autowired: tự động tìm kiếm và gán một đối tượng UserRepository cho thuộc tính userRepository của lớp UserService.
  • createUser(): phương thức thêm một đối tượng User vào cơ sở dữ liệu bằng cách sử dụng phương thức save() của UserRepository
  • updateUser(): phương thức sửa một đối tượng User từ cơ sở dữ liệu bằng cách sử dụng phương thức save() của UserRepository
  • deleteById(): phương thức xóa một đối tượng theo Id của User từ cơ sở dữ liệu bằng cách sử dụng phương thức deleteById() của UserRepository
  • getUserById(): phương thức lấy một đối tượng theo Id của User từ cơ sở dữ liệu bằng cách sử dụng phương thức findById() của UserRepository
  • getAllUsers(): phương thức lấy một đối tượng User từ cơ sở dữ liệu bằng cách sử dụng phương thức findAll() của UserRepository

Sử dụng Controller: Cuối cùng, bạn có thể sử dụng Controller để xử lý các yêu cầu HTTP của người dùng và gọi các phương thức tương ứng trong Service để thực hiện các tác vụ nghiệp vụ.

Ví dụ, nếu bạn muốn thêm một phương thức đăng ký người dùng vào Controller, bạn có thể định nghĩa một UserController như sau:

@RestController
@RequestMapping("/api/users")
public class UserController {

    @Autowired
    private UserService userService;

    @PostMapping("/createUser")
    public void registerUser(@RequestBody User user) {
        userService.createUser(user);
    }

    // other controller methods
}

Trong đó:

  • @RestController: đánh dấu lớp là một Controller và đồng thời là một RestController.
  • @RequestMapping: đánh dấu đường dẫn URL chung cho tất cả các yêu cầu HTTP vào Controller.
  • @Autowired: tự động tìm kiếm và gán một đối tượng UserService cho thuộc tính userService của lớp UserController.
  • @PostMapping: đánh dấu phương thức đăng ký người dùng là một yêu cầu HTTP POST.
  • @RequestBody: chỉ định đối tượng User được truyền vào phương thức đăng ký người dùng.

Sau khi đã định nghĩa các đối tượng Entity, Repository, Service và Controller, bạn có thể chạy ứng dụng Spring Boot của mình và kiểm tra các chức năng của nó. Chúc bạn thành công!

3. Thực hiện các thao tác CRUD với cơ sở dữ liệu H2

Thực hiện thao tác CRUD đơn giản

Để thực hiện các thao tác CRUD (Create, Read, Update, Delete) với cơ sở dữ liệu H2, bạn có thể sử dụng các phương thức cơ bản của JpaRepository mà bạn đã định nghĩa trước đó.

Ví dụ, để lấy tất cả các đối tượng User từ cơ sở dữ liệu, bạn có thể sử dụng phương thức findAll() như sau:

List<User> users = userRepository.findAll();

Tương tự, để thêm một đối tượng User mới vào cơ sở dữ liệu, bạn có thể sử dụng phương thức save() như sau:

User user = new User("John Doe", "johndoe@example.com");
userRepository.save(user);

Để cập nhật một đối tượng User đã có trong cơ sở dữ liệu, bạn có thể lấy đối tượng đó từ cơ sở dữ liệu, sửa đổi thuộc tính của nó và sau đó sử dụng phương thức save() để cập nhật đối tượng đã sửa đổi:

Optional<User> optionalUser = userRepository.findById(1L);
if (optionalUser.isPresent()) {
    User user = optionalUser.get();
    user.setName("Jane Doe");
    userRepository.save(user);
}

Cuối cùng, để xóa một đối tượng User khỏi cơ sở dữ liệu, bạn có thể sử dụng phương thức delete() như sau:

userRepository.deleteById(1L);

Thực hành các chức năng nâng cao

Ngoài các thao tác CRUD cơ bản, bạn cũng có thể thực hiện các chức năng nâng cao hơn với cơ sở dữ liệu H2 bằng cách sử dụng các phương thức khác của JpaRepository và EntityManager.

Ví dụ, để lấy tất cả các đối tượng User có tên bắt đầu bằng chữ "J", bạn có thể sử dụng phương thức findByXXXStartingWith() của JpaRepository như sau:

List<User> users = userRepository.findByNameStartingWith("J");

Tương tự, để lấy tất cả các đối tượng User theo trật tự tên giảm dần, bạn có thể sử dụng phương thức findByXXXOrderByYYYDesc() của JpaRepository như sau:

List<User> users = userRepository.findByOrderByEmailDesc();

Bạn cũng có thể sử dụng các truy vấn tùy chỉnh bằng cách sử dụng EntityManager. Ví dụ, để lấy tất cả các đối tượng User có tên bắt đầu bằng chữ "J" bằng cách sử dụng JPQL (Java Persistence Query Language), bạn có thể sử dụng EntityManager như sau:

TypedQuery<User> query = entityManager.createQuery(
    "SELECT u FROM User u WHERE u.name LIKE :namePrefix", User.class);
query.setParameter("namePrefix", "J%");
List<User> users = query.getResultList();

4. Các câu hỏi thường gặp

Tại sao chúng ta nên sử dụng Spring Boot và JPA?

Sử dụng Spring Boot và JPA giúp cho việc phát triển ứng dụng trở nên nhanh chóng và hiệu quả hơn. Spring Boot giúp cho việc cấu hình ứng dụng trở nên dễ dàng hơn, trong khi JPA cung cấp một cách để truy xuất cơ sở dữ liệu một cách linh hoạt và hiệu quả.

Làm thế nào để kết nối ứng dụng Spring Boot với cơ sở dữ liệu H2?

Để kết nối ứng dụng Spring Boot với cơ sở dữ liệu H2, bạn cần thêm H2 dependency vào file pom.xml. Sau đó, bạn cần cấu hình các thông số kết nối cơ sở dữ liệu trong file application.properties. Cuối cùng, bạn cần tạo các entity class và repository interface để truy cập cơ sở dữ liệu.

Làm thế nào để tạo entity class trong Spring Boot?

Để tạo entity class trong Spring Boot, bạn cần tạo một class và đánh dấu nó với annotation @Entity. Bạn cần định nghĩa các thuộc tính của entity class bằng cách sử dụng các annotation như @Id, @Column, @ManyToOne, @OneToMany,... để chỉ định các ràng buộc và quan hệ giữa các

5. Kết bài viết

Nói tóm lại, tương tác giữa Spring Boot, JPA và cơ sở dữ liệu H2 là một phần quan trọng trong việc phát triển ứng dụng web hiệu quả. Sử dụng Spring Data JPA và cấu hình đơn giản cho H2, chúng ta có thể tương tác với cơ sở dữ liệu một cách dễ dàng và giảm thiểu thời gian phát triển. Hy vọng qua bài viết trên nạn có thể áp dụng được vào dự án hay của mình, nếu có bất kỳ thắc mắc gì bạn có thể để lại phản hồi ở dưới để được giải đáp nhé!!

Cùng chuyên mục:

Hướng dẫn Upload file với Spring Boot và jQuery Ajax trong Java

Hướng dẫn Upload file với Spring Boot và jQuery Ajax trong Java

Hướng dẫn download file với Spring Boot trong Java

Hướng dẫn download file với Spring Boot trong Java

Hướng dẫn Upload file với Spring Boot trong Java

Hướng dẫn Upload file với Spring Boot trong Java

Hướng dẫn CRUD với Spring Boot, REST và AngularJS trong Java

Hướng dẫn CRUD với Spring Boot, REST và AngularJS trong Java

Cách sử dụng Spring  Scheduled trong Spring Boot

Cách sử dụng Spring Scheduled trong Spring Boot

Cách dùng Groovy trong Spring Boot Java

Cách dùng Groovy trong Spring Boot Java

Cách dùng Spring Boot và Mustache trong Java

Cách dùng Spring Boot và Mustache trong Java

Cách dùng Spring Boot và MongoDB trong Java

Cách dùng Spring Boot và MongoDB trong Java

Cách tạo Restful Client bằng RestTemplate trong Spring Boot

Cách tạo Restful Client bằng RestTemplate trong Spring Boot

Hướng dẫn sử dụng Interceptor trong Spring Boot

Hướng dẫn sử dụng Interceptor trong Spring Boot

Sử dụng Twitter Bootstrap trong Spring Boot

Sử dụng Twitter Bootstrap trong Spring Boot

Tạo trang web đa ngôn ngữ với Spring Boot trong Java

Tạo trang web đa ngôn ngữ với Spring Boot trong Java

Tạo ứng dụng Chat với Spring Boot và Websocket

Tạo ứng dụng Chat với Spring Boot và Websocket

Sử dụng JUnit để tạo unit test trong Spring Boot

Sử dụng JUnit để tạo unit test trong Spring Boot

Cách triển khai Spring Boot trên Tomcat Server

Cách triển khai Spring Boot trên Tomcat Server

Cách test RESTful API trong Spring Boot

Cách test RESTful API trong Spring Boot

Cách dùng Spring Security trong Spring Boot để xác thực và phân quyền

Cách dùng Spring Security trong Spring Boot để xác thực và phân quyền

Duyệt cây nhị phân bằng phương pháp inOder trong Java

Duyệt cây nhị phân bằng phương pháp inOder trong Java

Xóa node của cây nhị phân tìm kiếm trong Java

Xóa node của cây nhị phân tìm kiếm trong Java

Bảo mật Spring Boot RESTful Service sử dụng Basic Authentication trong Java

Bảo mật Spring Boot RESTful Service sử dụng Basic Authentication trong Java

Top