Hibernate - Tập tin ánh xạ

Một ánh xạ đối tượng / quan hệ thường được định nghĩa trong một tài liệu XML. Tệp ánh xạ này hướng dẫn Hibernate - làm thế nào để ánh xạ lớp hoặc các lớp đã xác định với các bảng cơ sở dữ liệu?

Mặc dù nhiều người dùng Hibernate chọn viết XML bằng tay, nhưng có một số công cụ để tạo tài liệu ánh xạ. Bao gồm cácXDoclet, MiddlegenAndroMDA cho người dùng Hibernate nâng cao.

Chúng ta hãy xem xét lớp POJO đã được xác định trước đó của chúng ta mà các đối tượng sẽ tồn tại trong bảng được định nghĩa trong phần tiếp theo.

public class Employee {
   private int id;
   private String firstName; 
   private String lastName;   
   private int salary;  

   public Employee() {}
   
   public Employee(String fname, String lname, int salary) {
      this.firstName = fname;
      this.lastName = lname;
      this.salary = salary;
   }
   
   public int getId() {
      return id;
   }
   
   public void setId( int id ) {
      this.id = id;
   }
   
   public String getFirstName() {
      return firstName;
   }
   
   public void setFirstName( String first_name ) {
      this.firstName = first_name;
   }
   
   public String getLastName() {
      return lastName;
   }
   
   public void setLastName( String last_name ) {
      this.lastName = last_name;
   }
   
   public int getSalary() {
      return salary;
   }
   
   public void setSalary( int salary ) {
      this.salary = salary;
   }
}

Sẽ có một bảng tương ứng với mỗi đối tượng mà bạn sẵn sàng cung cấp tính bền bỉ. Hãy xem xét các đối tượng trên cần được lưu trữ và truy xuất vào bảng RDBMS sau:

create table EMPLOYEE (
   id INT NOT NULL auto_increment,
   first_name VARCHAR(20) default NULL,
   last_name  VARCHAR(20) default NULL,
   salary     INT  default NULL,
   PRIMARY KEY (id)
);

Dựa trên hai thực thể trên, chúng ta có thể xác định tệp ánh xạ sau, tệp này hướng dẫn Hibernate cách ánh xạ lớp hoặc các lớp đã xác định vào bảng cơ sở dữ liệu.

<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 

<hibernate-mapping>
   <class name = "Employee" table = "EMPLOYEE">
      
      <meta attribute = "class-description">
         This class contains the employee detail. 
      </meta>
      
      <id name = "id" type = "int" column = "id">
         <generator class="native"/>
      </id>
      
      <property name = "firstName" column = "first_name" type = "string"/>
      <property name = "lastName" column = "last_name" type = "string"/>
      <property name = "salary" column = "salary" type = "int"/>
      
   </class>
</hibernate-mapping>

Bạn nên lưu tài liệu ánh xạ trong một tệp có định dạng <classname> .hbm.xml. Chúng tôi đã lưu tài liệu ánh xạ của mình trong tệp Employee.hbm.xml.

Hãy để chúng tôi hiểu một chút chi tiết về các phần tử ánh xạ được sử dụng trong tệp ánh xạ -

  • Tài liệu ánh xạ là một tài liệu XML có <hibernate-mapping> là phần tử gốc, chứa tất cả <class> các yếu tố.

  • Các <class>các phần tử được sử dụng để xác định các ánh xạ cụ thể từ một lớp Java đến các bảng cơ sở dữ liệu. Tên lớp Java được chỉ định bằng cách sử dụngname thuộc tính của phần tử lớp và cơ sở dữ liệu table tên được chỉ định bằng cách sử dụng thuộc tính bảng.

  • Các <meta> phần tử là phần tử tùy chọn và có thể được sử dụng để tạo mô tả lớp.

  • Các <id>phần tử ánh xạ thuộc tính ID duy nhất trong lớp với khóa chính của bảng cơ sở dữ liệu. Cácname thuộc tính của phần tử id đề cập đến thuộc tính trong lớp và columnthuộc tính tham chiếu đến cột trong bảng cơ sở dữ liệu. Cáctype thuộc tính giữ kiểu ánh xạ ngủ đông, kiểu ánh xạ này sẽ chuyển đổi từ kiểu dữ liệu Java sang SQL.

  • Các <generator>phần tử bên trong phần tử id được sử dụng để tự động tạo các giá trị khóa chính. Cácclass thuộc tính của phần tử trình tạo được đặt thành native để ngủ đông nhặt một trong hai identity, sequence, hoặc là hilo thuật toán tạo khóa chính tùy thuộc vào khả năng của cơ sở dữ liệu bên dưới.

  • Các <property>phần tử được sử dụng để ánh xạ một thuộc tính lớp Java vào một cột trong bảng cơ sở dữ liệu. Cácname thuộc tính của phần tử đề cập đến thuộc tính trong lớp và columnthuộc tính tham chiếu đến cột trong bảng cơ sở dữ liệu. Cáctype thuộc tính giữ kiểu ánh xạ ngủ đông, kiểu ánh xạ này sẽ chuyển đổi từ kiểu dữ liệu Java sang SQL.

Có sẵn các thuộc tính và phần tử khác, sẽ được sử dụng trong tài liệu lập bản đồ và tôi sẽ cố gắng đề cập nhiều nhất có thể trong khi thảo luận về các chủ đề liên quan đến Hibernate khác.