في Hibernate، يوجد مفهوم جلب سطر واحد. للحصول على سطر واحد في جدول القاعدة البيانات المقابل، سنختار إماget()أوload().
get()
get()دائماً يضرب قاعدة البيانات.
إذا تم العثور على المعرف القابل للتسلسل، فسنحصل على التفاصيل المقابلة.
مثال
SwingBowlers swingBowlers = (SwingBowlers) openSession.get(SwingBowlers.class,1);
المعرف القابل للتسلسل هو 1 (jerSeyNo) –> المفتاح الأساسي
إذا لم يتم العثور على المعرف القابل للتجزئة ، فسنحصل على النتيجة كـ null.تحميل()
تحميل()دائمًا يخلق كائنًا مستعارًا.إذا تم العثور على المعرف القابل للتجزئة، فسنحصل على التفاصيل المقابلة.
مثال
SwingBowlers swingBowlers = (SwingBowlers) openSession.get(SwingBowlers.class,1);
System.out.println(swingBowlers);
المعرف القابل للتجزئة هو 1 (jerSeyNo) –> المفتاح الأساسي
إذا لم يكن المعرف القابل للتجسيد موجودًا، فسنحصل على نتيجة org.hibernate.ObjectNotFoundException.
تحقق مما إذا كان لا يزال يولد استعلامًا على الرغم من استخدامنا للطريقة load لأننا نحاول طباعة تفاصيل الكائن. [System.out.println(swingBowlers);]. ولكنه يأتي من كائن Proxy [Dummy Object] فقط.
دعونا ننظر إليه من الناحية العملية.
HibernateTutorialRun.java
package com.blogspot.javacodebypj;
import com.blogspot.javacodebypj.dao.SwingBowlersDaoImpl;
public class HibernateTutorialRun {
public static void main(String[] args) {
SwingBowlersDaoImpl sbdi = new SwingBowlersDaoImpl();
sbdi.getSwingBowlers();
}
}
الشرح: HibernateTutorialRun هي فئة لتشغيل تطبيق HibernateTutorial، ونحن نستخدمه بدون خادم. Hibernate يمكن أن يعمل مع الخادم وبدون خادم. قمنا بإنشاء الطرفية الرئيسية، وفي ذلك، أنشأنا كائنًا للفئة المقابلة SwingBowlersDaoImpl. ثم نستخدم مرجع الكائن هذا لاستدعاء الطريقة المقابلة.
SwingBowlersDao.java
package com.blogspot.javacodebypj.dao;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import com.blogspot.javacodebypj.domain.SwingBowlers;
import com.blogspot.javacodebypj.util.HibernateUtil;
public class SwingBowlersDaoImpl implements SwingBowlersDao {
@Override
public void getSwingBowlers() {
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session openSession = sessionFactory.openSession();
// استخدام طريقة التحميل
SwingBowlers swingBowlers = (SwingBowlers) openSession.load(SwingBowlers.class, 1);
System.out.println(swingBowlers);
}
}
تفسير:لقد قمنا للتو بإنشاءSwingBowlersDaoImplفئة ونفذناها باستخدامSwingBowlersDaoوسنقوم بتجاوز الطريقة المقابلة. نحن نحاول استدعاءHibernateUtilطريقة فئة، أيgetSessionFactoryطريقة، سنحصل علىSessionFactoryكائن، وباستخدام مرجعSessionFactoryالكائن، نحن نستدعيopenSessionطريقة. ثم سنحصل علىSessionكائن.
عندما نحصل على كائن الجلسة بهذه الجلسة، يمكننا استخدام إما طريقة load أو طريقة get، ونقوم بالتحويل إلى الفئة المقابلة نظرًا لأن طريقة load أو طريقة get تُرجع كائن Object. أتمنى أنكم تدركون مفهوم التحجيم والترشيح في جافا.
SwingBowlers.java
package com.blogspot.javacodebypj.domain;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class SwingBowlers {
@Id
@Column(length = 3)
private int jerseyNo;
@Column(length = 15)
private String bowlerName;
@Column(length = 10)
private String country;
public int getJerseyNo() {
return jerseyNo;
}
public void setJerseyNo(int jerseyNo) {
this.jerseyNo = jerseyNo;
}
public String getBowlerName() {
return bowlerName;
}
public void setBowlerName(String bowlerName) {
this.bowlerName = bowlerName;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
@Override
public String toString() {
return "SwingBowlers [jerseyNo=" + jerseyNo + ", bowlerName=" + bowlerName + ", country=" + country + "]";
}
}
الشرح:نظرًا لأننا نقوم بتعيين الحقول إلى الأعمدة في قاعدة البيانات. إذا كان اسم الحقل مطابقًا لاسم العمود في جدول قاعدة البيانات، فليس هناك حاجة لكتابة قيمة اسم العمود في مستوى التعليقات. وبالمثل، يكون اسم الجدول مطابقًا لاسم الفئةSwingBowlersولهذا السبب لم نقم بتحديدها مع @Table. لجعلها فئة مجال، نستخدم تعليق @Entity في الجزء العلوي من الفئة المعنية.
HibernateUtil.java
package com.blogspot.javacodebypj.util;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static SessionFactory sessionFactory;
private HibernateUtil() {
}
public static SessionFactory getSessionFactory() {
if (sessionFactory == null) {
Configuration conf = new Configuration().configure();
sessionFactory = conf.buildSessionFactory();
}
return sessionFactory;
}
}
الشرح:لقد أنشأنا فقطSessionFactoryكفئة أحادية النمط.
hibernate.cfg.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver
</property>
<property name="connection.url">jdbc:mysql://localhost:3306/cricketer</property>
<property name="connection.username">root</property>
<property name="connection.password">myRoot4*</property>
<property name="dialect">org.hibernate.dialect.MySQL8Dialect</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<mapping class="com.blogspot.javacodebypj.domain.SwingBowlers" />
</session-factory>
</hibernate-configuration>
الشرح:في هذا الملف، لدينا ثلاثة أقسام:
- خصائص متعلقة بقاعدة البيانات
- خصائص متعلقة بـ Hibernate
- فئة التعيين
كما تعلمون، نحن لا نستخدم ملف تعيين XML لـ Hibernate، ولهذا السبب ذكرنا فئة التعيين.
لغة:يتم استخدامها لإنشاء الاستعلامات بتوافق مع قاعدة البيانات. في هذا التطبيق، نستخدم قاعدة بيانات MySQL.
إظهار_الاستعلامات:بمجرد إنشاء الاستعلامات، نحتاج إلى رؤية تلك الاستعلامات، لذا نحتاج إلى ذكرها كصحيحة.
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.blogspot.javacodebypj</groupId>
<artifactId>HibernateTutorial</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>HibernateTutorial</name>
<description>HibernateTutorial by Ponnam Jay</description>
<properties>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.6.14.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
</dependencies>
</project>
شرح:لقد أنشأنا بنية مشروع Maven هذه من خلال برنامج التطوير Eclipse كمشروع Maven بسيط. أضفنا مراجعات مثل hibernate-core، mysql-connector-java واستخدمنا Java 1.8 للملاحظة في pom.xml في قسم الخصائص الهدف والمصدر.
تفاصيل قاعدة البيانات
الخاتمة
إذا كنت ترغب في جلب (استرداد) صف واحد (سجل واحد) ، فيمكنك استخدام إما get الطريقة [أو] load الطريقة.