최대 절전 모드-예제

이제 Hibernate를 사용하여 독립형 애플리케이션에서 Java 지속성을 제공하는 방법을 이해하는 예제를 살펴 보겠습니다. Hibernate 기술을 사용하여 Java 애플리케이션을 만드는 데 관련된 여러 단계를 살펴 보겠습니다.

POJO 클래스 생성

애플리케이션을 만드는 첫 번째 단계는 데이터베이스에 유지되는 애플리케이션에 따라 Java POJO 클래스를 빌드하는 것입니다. 우리의Employee 수업 getXXXsetXXX JavaBeans 호환 클래스로 만드는 메소드.

POJO (Plain Old Java Object)는 EJB 프레임 워크에 각각 필요한 일부 특수 클래스 및 인터페이스를 확장하거나 구현하지 않는 Java 객체입니다. 모든 일반 Java 객체는 POJO입니다.

Hibernate에 의해 지속될 클래스를 디자인 할 때, 하나의 속성과 함께 JavaBeans 호환 코드를 제공하는 것이 중요합니다. id Employee 클래스의 속성.

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;
   }
}

데이터베이스 테이블 생성

두 번째 단계는 데이터베이스에 테이블을 만드는 것입니다. 각 개체에 해당하는 하나의 테이블이 있으며 지속성을 제공 할 의향이 있습니다. 위의 객체가 다음 RDBMS 테이블에 저장되고 검색되어야한다고 생각하십시오-

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)
);

매핑 구성 파일 만들기

이 단계는 정의 된 클래스 또는 클래스를 데이터베이스 테이블에 매핑하는 방법을 Hibernate에 지시하는 매핑 파일을 생성하는 것입니다.

<?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>

매핑 문서는 <classname> .hbm.xml 형식의 파일에 저장해야합니다. Employee.hbm.xml 파일에 매핑 문서를 저장했습니다. 매핑 문서에 대해 자세히 살펴 보겠습니다.

  • 매핑 문서는 모든 <class> 요소를 포함하는 루트 요소로 <hibernate-mapping>을 갖는 XML 문서입니다.

  • 그만큼 <class>요소는 Java 클래스에서 데이터베이스 테이블로의 특정 매핑을 정의하는 데 사용됩니다. Java 클래스 이름은name 클래스 요소의 속성과 데이터베이스 테이블 이름은 table 속성.

  • 그만큼 <meta> 요소는 선택적 요소이며 클래스 설명을 작성하는 데 사용할 수 있습니다.

  • 그만큼 <id> 요소는 클래스의 고유 ID 속성을 데이터베이스 테이블의 기본 키에 매핑합니다. 그만큼name id 요소의 속성은 클래스의 속성을 참조하고 column속성은 데이터베이스 테이블의 열을 나타냅니다. 그만큼type 속성은 최대 절전 모드 매핑 유형을 보유하며이 매핑 유형은 Java에서 SQL 데이터 유형으로 변환됩니다.

  • 그만큼 <generator>id 요소 내의 요소는 기본 키 값을 자동으로 생성하는 데 사용됩니다. 그만큼class 생성기 요소의 속성이 다음으로 설정됩니다. native 최대 절전 모드에서 identity, sequence 또는 hilo 기본 데이터베이스의 기능에 따라 기본 키를 만드는 알고리즘.

  • 그만큼 <property>요소는 Java 클래스 속성을 데이터베이스 테이블의 열에 매핑하는 데 사용됩니다. 그만큼name 요소의 속성은 클래스의 속성을 참조하고 column속성은 데이터베이스 테이블의 열을 나타냅니다. 그만큼type 속성은 최대 절전 모드 매핑 유형을 보유하며이 매핑 유형은 Java에서 SQL 데이터 유형으로 변환됩니다.

사용할 수있는 다른 속성과 요소가 있는데, 이는 매핑 문서에서 사용될 것이며 다른 Hibernate 관련 주제를 논의하면서 가능한 한 많은 것을 다루려고 노력할 것입니다.

애플리케이션 클래스 생성

마지막으로 응용 프로그램을 실행하기 위해 main () 메서드를 사용하여 응용 프로그램 클래스를 만듭니다. 이 애플리케이션을 사용하여 직원의 기록을 거의 저장하지 않은 다음 해당 기록에 CRUD 작업을 적용합니다.

import java.util.List; 
import java.util.Date;
import java.util.Iterator; 
 
import org.hibernate.HibernateException; 
import org.hibernate.Session; 
import org.hibernate.Transaction;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class ManageEmployee {
   private static SessionFactory factory; 
   public static void main(String[] args) {
      
      try {
         factory = new Configuration().configure().buildSessionFactory();
      } catch (Throwable ex) { 
         System.err.println("Failed to create sessionFactory object." + ex);
         throw new ExceptionInInitializerError(ex); 
      }
      
      ManageEmployee ME = new ManageEmployee();

      /* Add few employee records in database */
      Integer empID1 = ME.addEmployee("Zara", "Ali", 1000);
      Integer empID2 = ME.addEmployee("Daisy", "Das", 5000);
      Integer empID3 = ME.addEmployee("John", "Paul", 10000);

      /* List down all the employees */
      ME.listEmployees();

      /* Update employee's records */
      ME.updateEmployee(empID1, 5000);

      /* Delete an employee from the database */
      ME.deleteEmployee(empID2);

      /* List down new list of the employees */
      ME.listEmployees();
   }
   
   /* Method to CREATE an employee in the database */
   public Integer addEmployee(String fname, String lname, int salary){
      Session session = factory.openSession();
      Transaction tx = null;
      Integer employeeID = null;
      
      try {
         tx = session.beginTransaction();
         Employee employee = new Employee(fname, lname, salary);
         employeeID = (Integer) session.save(employee); 
         tx.commit();
      } catch (HibernateException e) {
         if (tx!=null) tx.rollback();
         e.printStackTrace(); 
      } finally {
         session.close(); 
      }
      return employeeID;
   }
   
   /* Method to  READ all the employees */
   public void listEmployees( ){
      Session session = factory.openSession();
      Transaction tx = null;
      
      try {
         tx = session.beginTransaction();
         List employees = session.createQuery("FROM Employee").list(); 
         for (Iterator iterator = employees.iterator(); iterator.hasNext();){
            Employee employee = (Employee) iterator.next(); 
            System.out.print("First Name: " + employee.getFirstName()); 
            System.out.print("  Last Name: " + employee.getLastName()); 
            System.out.println("  Salary: " + employee.getSalary()); 
         }
         tx.commit();
      } catch (HibernateException e) {
         if (tx!=null) tx.rollback();
         e.printStackTrace(); 
      } finally {
         session.close(); 
      }
   }
   
   /* Method to UPDATE salary for an employee */
   public void updateEmployee(Integer EmployeeID, int salary ){
      Session session = factory.openSession();
      Transaction tx = null;
      
      try {
         tx = session.beginTransaction();
         Employee employee = (Employee)session.get(Employee.class, EmployeeID); 
         employee.setSalary( salary );
		 session.update(employee); 
         tx.commit();
      } catch (HibernateException e) {
         if (tx!=null) tx.rollback();
         e.printStackTrace(); 
      } finally {
         session.close(); 
      }
   }
   
   /* Method to DELETE an employee from the records */
   public void deleteEmployee(Integer EmployeeID){
      Session session = factory.openSession();
      Transaction tx = null;
      
      try {
         tx = session.beginTransaction();
         Employee employee = (Employee)session.get(Employee.class, EmployeeID); 
         session.delete(employee); 
         tx.commit();
      } catch (HibernateException e) {
         if (tx!=null) tx.rollback();
         e.printStackTrace(); 
      } finally {
         session.close(); 
      }
   }
}

컴파일 및 실행

위에서 언급 한 애플리케이션을 컴파일하고 실행하는 단계는 다음과 같습니다. 컴파일 및 실행을 계속하기 전에 PATH 및 CLASSPATH를 적절하게 설정했는지 확인하십시오.

  • 설정 장에서 설명한대로 hibernate.cfg.xml 설정 파일을 생성합니다.

  • 위와 같이 Employee.hbm.xml 매핑 파일을 생성합니다.

  • 위와 같이 Employee.java 소스 파일을 생성하고 컴파일합니다.

  • 위와 같이 ManageEmployee.java 소스 파일을 생성하고 컴파일합니다.

  • ManageEmployee 바이너리를 실행하여 프로그램을 실행하십시오.

다음과 같은 결과가 나오고 EMPLOYEE 테이블에 레코드가 생성됩니다.

$java ManageEmployee
.......VARIOUS LOG MESSAGES WILL DISPLAY HERE........

First Name: Zara  Last Name: Ali  Salary: 1000
First Name: Daisy  Last Name: Das  Salary: 5000
First Name: John  Last Name: Paul  Salary: 10000
First Name: Zara  Last Name: Ali  Salary: 5000
First Name: John  Last Name: Paul  Salary: 10000

EMPLOYEE 테이블을 확인하면 다음과 같은 레코드가 있어야합니다.

mysql> select * from EMPLOYEE;
+----+------------+-----------+--------+
| id | first_name | last_name | salary |
+----+------------+-----------+--------+
| 29 | Zara       | Ali       |   5000 |
| 31 | John       | Paul      |  10000 |
+----+------------+-----------+--------+
2 rows in set (0.00 sec

mysql>