0
0
Lập trình
Admin Team
Admin Teamtechmely

Tìm Hiểu Về ORM trong Hibernate: Cách Hoạt Động và Ứng Dụng Cơ Bản

Đăng vào 1 tháng trước

• 4 phút đọc

Chủ đề:

@java@hibernate

Bạn đã bao giờ tự hỏi ORM trong Hibernate hoạt động như thế nào? Hãy cùng khám phá trong bài viết này!

ORM (Object Relational Mapping) là một kỹ thuật lập trình mạnh mẽ cho phép chúng ta ánh xạ các đối tượng trong ngôn ngữ lập trình vào dữ liệu trong cơ sở dữ liệu quan hệ. Với Hibernate, ORM giúp đơn giản hóa việc thao tác và truy cập dữ liệu, giúp việc phát triển ứng dụng trở nên nhanh chóng và hiệu quả hơn. Trong bài viết này, chúng ta sẽ tìm hiểu kỹ về các thành phần quan trọng trong Hibernate và cách chúng hoạt động, cùng với một ví dụ cụ thể.

Các Thành Phần Cơ Bản Trong Hibernate

1. Annotation

Để sử dụng Hibernate hiệu quả, trước tiên chúng ta cần hiểu về các Annotation như @Entity, @Table, @Column,... Những chú thích này là siêu dữ liệu trong Java, giúp định nghĩa cấu trúc của các đối tượng và ánh xạ chúng vào các bảng trong cơ sở dữ liệu.

java Copy
@Entity
@Table(name = "user")
@Data
public class UserModel {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

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

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

    @NotEmpty
    @Column(name = "createdDate")
    private Date createdDate;
}

2. Reflection

Reflection là một kỹ thuật mạnh mẽ cho phép chúng ta khám phá và thao tác với các thuộc tính của lớp trong thời gian chạy. Nó cho phép chúng ta đọc các Annotation và thay đổi giá trị của các biến, phương thức trong lớp mà không cần biết trước kiến trúc của chúng.

Xây Dựng Một ORM Đơn Giản

Sau khi nắm được các khái niệm cần thiết, chúng ta sẽ triển khai một ORM đơn giản. Đầu tiên, hãy tạo ra các Annotation cần thiết.

Tạo Annotation cho Cột

java Copy
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
public @interface Column {
    String columnName();
}

Tạo Annotation cho Bảng

java Copy
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
public @interface Table {
    String tableName();
}

Tạo Model Để Làm Việc Với ORM

java Copy
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(tableName = "user")
public class User {
    @Column(columnName = "usr")
    String username;

    @Column(columnName = "pwd")
    String password;
}

Cài Đặt Simple ORM DAO

java Copy
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class SimpleOrmDao<T> {
  private Connection getConnection() throws SQLException, ClassNotFoundException {
      Class.forName("com.mysql.cj.jdbc.Driver");
      return DriverManager.getConnection(
              "jdbc:mysql://localhost:3306/simple_orm", "root", "password");
  }

  List<T> getAllUserAsOrm(Class<T> clazz) throws SQLException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
      List<T> userList = new ArrayList<>();
      Connection connection = getConnection();
      String tableName = clazz.getAnnotation(Table.class).tableName();
      ResultSet resultSet = connection.prepareStatement("SELECT * FROM " + tableName).executeQuery();
      while (resultSet.next()){ 
          T user = clazz.getConstructor().newInstance();
          for (Field field : clazz.getDeclaredFields()) {
              if(field.isAnnotationPresent(Column.class)){
                  String columnName = field.getAnnotation(Column.class).columnName();
                  if(field.getType() == String.class){
                      field.set(user, resultSet.getString(columnName));
                  }
              }
          }
          userList.add(user);
      }
      return userList;
  }
}

Chạy Ứng Dụng

java Copy
public class Main {
    public static void main(String[] args) throws ClassNotFoundException, SQLException, InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
        SimpleOrmDao simpleOrmDao = new SimpleOrmDao();
        System.out.println(simpleOrmDao.getAllUserAsOrm(User.class));
    }
}

Kết quả từ chương trình sẽ tương tự như những gì Hibernate cung cấp cho chúng ta. Như vậy, bài viết đã giới thiệu cho bạn những kiến thức cơ bản về ORM trong Hibernate và cách xây dựng một ORM đơn giản. Hy vọng bạn sẽ tìm thấy thông tin hữu ích trong bài viết này và hẹn gặp lại trong các bài viết tiếp theo!
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào