JPA - Người quản lý thực thể

Chương này sẽ đưa bạn qua ví dụ đơn giản với JPA. Chúng ta hãy coi quản lý nhân viên là một ví dụ. Nó có nghĩa là quản lý nhân viên đang tạo, cập nhật, tìm và xóa một nhân viên. Như đã đề cập ở trên, chúng tôi đang sử dụng cơ sở dữ liệu MySQL cho các hoạt động cơ sở dữ liệu.

Các mô-đun chính cho ví dụ này như sau:

  • Model or POJO

    Employee.java

  • Persistence

    Persistence.xml

  • Service

    CreatingEmployee.java

    UpdatingEmployee.java

    FindingEmployee.java

    DeletingEmployee.java

Hãy để chúng tôi phân cấp gói mà chúng tôi đã sử dụng trong cài đặt JPA với Eclipselink. Thực hiện theo hệ thống phân cấp cho ví dụ này như sau:

Tạo thực thể

Các thực thể không có gì khác ngoài bean hoặc Mô hình, trong ví dụ này, chúng tôi sẽ sử dụng Employee dưới dạng thực thể. eid, ename, salary,deglà các thuộc tính của thực thể này. Nó chứa các phương thức constructor, setter và getter mặc định của các thuộc tính đó.

Trong hệ thống phân cấp được hiển thị ở trên, hãy tạo một gói có tên ‘com.tutorialspoint.eclipselink.entity’, Dưới ‘src’(Nguồn) gói. Tạo một lớp có tênEmployee.java theo gói nhất định như sau:

package com.tutorialspoint.eclipselink.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table
public class Employee {

   @Id
   @GeneratedValue(strategy = GenerationType.AUTO) 	
   
   private int eid;
   private String ename;
   private double salary;
   private String deg;
   
   public Employee(int eid, String ename, double salary, String deg) {
      super( );
      this.eid = eid;
      this.ename = ename;
      this.salary = salary;
      this.deg = deg;
   }

   public Employee( ) {
      super();
   }

   public int getEid( ) {
      return eid;
   }
   
   public void setEid(int eid) {
      this.eid = eid;
   }
   
   public String getEname( ) {
      return ename;
   }
   
   public void setEname(String ename) {
      this.ename = ename;
   }

   public double getSalary( ) {
      return salary;
   }
   
   public void setSalary(double salary) {
      this.salary = salary;
   }

   public String getDeg( ) {
      return deg;
   }
   
   public void setDeg(String deg) {
      this.deg = deg;
   }
   
   @Override
   public String toString() {
      return "Employee [eid=" + eid + ", ename=" + ename + ", salary=" + salary + ", deg=" + deg + "]";
   }
}

Trong đoạn mã trên, chúng tôi đã sử dụng chú thích @Entity để tạo lớp POJO này dưới dạng thực thể.

Trước khi chuyển sang mô-đun tiếp theo, chúng ta cần tạo cơ sở dữ liệu cho thực thể quan hệ, thực thể này sẽ đăng ký cơ sở dữ liệu trong persistence.xmltập tin. Mở bàn làm việc MySQL và nhập truy vấn như sau:

create database jpadb
use jpadb

Persistence.xml

Mô-đun này đóng một vai trò quan trọng trong khái niệm JPA. Trong tệp xml này, chúng tôi sẽ đăng ký cơ sở dữ liệu và chỉ định lớp thực thể.

Trong phân cấp gói được hiển thị ở trên, Persence.xml trong gói Nội dung JPA như sau:

<?xml version="1.0" encoding="UTF-8"?>

<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
   http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
   
   <persistence-unit name="Eclipselink_JPA" transaction-type="RESOURCE_LOCAL">
   
      <class>com.tutorialspoint.eclipselink.entity.Employee</class>

      <properties>
         <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jpadb"/>
         <property name="javax.persistence.jdbc.user" value="root"/>
         <property name="javax.persistence.jdbc.password" value="root"/>
         <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
         <property name="eclipselink.logging.level" value="FINE"/>
         <property name="eclipselink.ddl-generation" value="create-tables"/>
      </properties>
      
   </persistence-unit>
</persistence>

Trong xml ở trên, thẻ <persistence-unit> được định nghĩa với tên cụ thể cho sự tồn tại của JPA. Thẻ <class> định nghĩa lớp thực thể với tên gói. Thẻ <properties> xác định tất cả các thuộc tính và thẻ <property> xác định từng thuộc tính như đăng ký cơ sở dữ liệu, đặc tả URL, tên người dùng và mật khẩu. Đây là các thuộc tính Eclipselink. Tệp này sẽ cấu hình cơ sở dữ liệu.

Hoạt động bền bỉ

Các hoạt động liên tục được sử dụng đối với cơ sở dữ liệu và chúng loadstorecác hoạt động. Trong một thành phần nghiệp vụ, tất cả các hoạt động liên tục đều thuộc các lớp dịch vụ.

Trong phân cấp gói được hiển thị ở trên, hãy tạo một gói có tên ‘com.tutorialspoint.eclipselink.service’, Dưới ‘src’(nguồn) gói. Tất cả các lớp dịch vụ được đặt tên là CreateEmloyee.java, UpdateEaffee.java, FindEaffee.java và DeleteEaffee.java. đi kèm theo gói nhất định như sau:

Tạo nhân viên

Tạo một lớp Nhân viên có tên là CreateEmployee.java như sau:

package com.tutorialspoint.eclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.tutorialspoint.eclipselink.entity.Employee;

public class CreateEmployee {

   public static void main( String[ ] args ) {
   
      EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
      
      EntityManager entitymanager = emfactory.createEntityManager( );
      entitymanager.getTransaction( ).begin( );

      Employee employee = new Employee( ); 
      employee.setEid( 1201 );
      employee.setEname( "Gopal" );
      employee.setSalary( 40000 );
      employee.setDeg( "Technical Manager" );
      
      entitymanager.persist( employee );
      entitymanager.getTransaction( ).commit( );

      entitymanager.close( );
      emfactory.close( );
   }
}

Trong đoạn mã trên, createEntityManagerFactory ()tạo một đơn vị độ bền bằng cách cung cấp cùng một tên duy nhất mà chúng tôi cung cấp cho đơn vị độ bền vững trong tệp Persistext. Đối tượng entitymanagerfactory sẽ tạo ra thực thể entitymanger bằng cách sử dụngcreateEntityManager ()phương pháp. Đối tượng entitymanager tạo thể hiện entitytransaction để quản lý giao dịch. Bằng cách sử dụng đối tượng entitymanager, chúng ta có thể duy trì các thực thể vào cơ sở dữ liệu.

Sau khi biên dịch và thực hiện chương trình trên, bạn sẽ nhận được thông báo từ thư viện eclipselink trên bảng điều khiển của eclipse IDE.

Để có kết quả, hãy mở bàn làm việc MySQL và nhập các truy vấn sau.

use jpadb
select * from employee

Bảng cơ sở dữ liệu có hiệu lực có tên employee sẽ được hiển thị dưới dạng bảng như sau:

Eid Tên Tiền lương Độ
1201 Gopal 40000 Giám đốc kỹ thuật

Cập nhật nhân viên

Để Cập nhật nhân viên, chúng ta cần lấy cơ sở dữ liệu biểu mẫu bản ghi, thực hiện các thay đổi và cuối cùng cam kết nó. Lớp có tênUpdateEmployee.java được hiển thị như sau:

package com.tutorialspoint.eclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.tutorialspoint.eclipselink.entity.Employee;

public class UpdateEmployee {
   public static void main( String[ ] args ) {
      EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
      
      EntityManager entitymanager = emfactory.createEntityManager( );
      entitymanager.getTransaction( ).begin( );
      Employee employee = entitymanager.find( Employee.class, 1201 );
      
      //before update
      System.out.println( employee );
      employee.setSalary( 46000 );
      entitymanager.getTransaction( ).commit( );
      
      //after update
      System.out.println( employee );
      entitymanager.close();
      emfactory.close();
   }
}

Sau khi biên dịch và thực hiện chương trình trên, bạn sẽ nhận được thông báo từ thư viện Eclipselink trên bảng điều khiển của eclipse IDE.

Để có kết quả, hãy mở bàn làm việc MySQL và nhập các truy vấn sau.

use jpadb
select * from employee

Bảng cơ sở dữ liệu có hiệu lực có tên employee sẽ được hiển thị dưới dạng bảng như sau:

Eid Tên Tiền lương Độ
1201 Gopal 46000 Giám đốc kỹ thuật

Mức lương của nhân viên, 1201 được cập nhật lên 46000.

Tìm nhân viên

Để Tìm một nhân viên, chúng tôi sẽ lấy bản ghi từ cơ sở dữ liệu và hiển thị nó. Trong hoạt động này, EntityTransaction không liên quan đến bất kỳ giao dịch nào không được áp dụng trong khi truy xuất bản ghi.

Lớp có tên FindEmployee.java như sau.

package com.tutorialspoint.eclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.tutorialspoint.eclipselink.entity.Employee;

public class FindEmployee {
   public static void main( String[ ] args ) {
   
      EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
      EntityManager entitymanager = emfactory.createEntityManager();
      Employee employee = entitymanager.find( Employee.class, 1201 );

      System.out.println("employee ID = " + employee.getEid( ));
      System.out.println("employee NAME = " + employee.getEname( ));
      System.out.println("employee SALARY = " + employee.getSalary( ));
      System.out.println("employee DESIGNATION = " + employee.getDeg( ));
   }
}

Sau khi biên dịch và thực hiện chương trình trên, bạn sẽ nhận được kết quả từ thư viện Eclipselink trên bảng điều khiển của eclipse IDE như sau:

employee ID = 1201
employee NAME = Gopal
employee SALARY = 46000.0
employee DESIGNATION = Technical Manager

Xóa nhân viên

Để xóa một nhân viên, trước tiên chúng tôi sẽ tìm bản ghi và sau đó xóa nó. Ở đây EntityTransaction đóng một vai trò quan trọng.

Lớp có tên DeleteEmployee.java như sau:

package com.tutorialspoint.eclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.tutorialspoint.eclipselink.entity.Employee;

public class DeleteEmployee {
   public static void main( String[ ] args ) {
   
      EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
      EntityManager entitymanager = emfactory.createEntityManager( );
      entitymanager.getTransaction( ).begin( );
      
      Employee employee = entitymanager.find( Employee.class, 1201 );
      entitymanager.remove( employee );
      entitymanager.getTransaction( ).commit( );
      entitymanager.close( );
      emfactory.close( );
   }
}

Sau khi biên dịch và thực hiện chương trình trên, bạn sẽ nhận được thông báo từ thư viện Eclipselink trên bảng điều khiển của eclipse IDE.

Để có kết quả, hãy mở bàn làm việc MySQL và nhập các truy vấn sau.

use jpadb
select * from employee

Cơ sở dữ liệu có hiệu lực có tên employee sẽ có bản ghi null.

Sau khi hoàn thành tất cả các mô-đun trong ví dụ này, cấu trúc phân cấp gói và tệp được hiển thị như sau: