ما هو الاستعلام المسمى؟
يتيح لك السبات تحديد عبارات الاستعلام في شكل سلاسل في ملف التعيين. وتسمى طريقة الاستعلام هذه باستعلام مسمى.
ما هي فوائد استخدام الاستعلامات المسماة؟
نظرًا لأن استخدام HQL الخاص بـ Hibernate غالبًا ما يتطلب كتابة عبارات استعلام سلسلة في كود Java، يتم خلط HQL بين الرموز، مما يؤدي إلى تدمير إمكانية قراءة التعليمات البرمجية. باستخدام الاستعلامات المسماة، يمكنك فصل منطق الأعمال وبيانات الاستعلام، مما يسمح لك بالتركيز على الاستعلامات كود SQL أو HQL منتشر في جميع أنحاء التطبيق.
يمكن استخدام الاستعلامات المسماة لمعالجة الاستعلامات المعقدة
كيفية تنفيذ الاستعلام المسمى؟
تقديم الطرق التالية:
الطريقة الأولى: قم بتعريف عبارة الاستعلام ضمن علامة <class/> في ملف التكوين
انسخ رمز الكود كما يلي:
<رسم خرائط السبات>
<اسم الفئة = "com.test.bean.Student" الجدول = "كتالوج الطالب" = "المستخدمين">
<اسم المعرف = "معرف" نوع = "عدد صحيح">
<اسم العمود = "معرف" />
<المولد />
</معرف>
<اسم الخاصية = "الاسم" نوع = "سلسلة">
<اسم العمود = "الاسم" الطول = "11" />
</خاصية>
<اسم الخاصية = "العمر" نوع = "عدد صحيح">
<اسم العمود = "العمر" />
</خاصية>
<اسم الخاصية = "الجنس" نوع = "سلسلة">
<اسم العمود = "الجنس" الطول = "2" />
</خاصية>
</فئة>
<!-- تحديد عبارة الاستعلام-->
<اسم الاستعلام = "findStudentByName">
<![CDATA[من الطالب حيث الاسم = :name]]>
</استعلام>
</ خريطة السبات>
ملاحظة : ماذا يعني <![CDATA[ ]]>؟
يشير إلى أنه نص عادي بدون ذلك، لا يمكن تخزين الأحرف < > & مباشرة في XML ويجب الهروب منها. ومع ذلك، باستخدام هذه العلامة، يمكن تخزين هذه الرموز في مستندات XML دون الهروب. يمكن أن يؤدي ذلك إلى تجنب الرموز الخاصة غير المتوقعة التي تسبب أخطاء في تحليل XML.
انسخ رمز الكود كما يلي:
استعلام القائمة العامة <الطالب> () {
جلسة الجلسة = HibernateSessionFactory.getSession();
Query q = session.getNamedQuery("findStudentByName");
q.setString("name", "zhangsan");
List<Student> list = q.list();
قائمة العودة؛
}
الطريقة الثانية : يمكنك أيضًا إعلان عبارة الاستعلام في علامة <class/> في ملف التكوين، لكن عليك تحديدها عند استدعاء كود Java (الحزمة + الفئة + اسم التكوين)
انسخ رمز الكود كما يلي:
<رسم خرائط السبات>
<اسم الفئة = "com.test.bean.Student" الجدول = "كتالوج الطالب" = "المستخدمين">
<اسم المعرف = "معرف" نوع = "عدد صحيح">
<اسم العمود = "معرف" />
<المولد />
</معرف>
<اسم الخاصية = "الاسم" نوع = "سلسلة">
<اسم العمود = "الاسم" الطول = "11" />
</خاصية>
<اسم الخاصية = "العمر" نوع = "عدد صحيح">
<اسم العمود = "العمر" />
</خاصية>
<اسم الخاصية = "الجنس" نوع = "سلسلة">
<اسم العمود = "الجنس" الطول = "2" />
</خاصية>
<!-- تحديد عبارة الاستعلام-->
<اسم الاستعلام = "findStudentByName">
<![CDATA[من الطالب حيث الاسم = :name]]>
</استعلام>
</فئة>
</ خريطة السبات>
استعلام القائمة العامة <الطالب> () {
جلسة الجلسة = HibernateSessionFactory.getSession();
Query q = session.getNamedQuery("com.test.bean.Student.findStudentByName");
q.setString("name", "zhangsan");
List<Student> list = q.list();
قائمة العودة؛
}
الطريقة الثالثة : استخدم استعلام SQL الأصلي <sql-query> في هذه الطريقة، يجب كتابة جميع أعمدة الجدول، وإلا سيحدث خطأ "اسم العمود غير صالح" إلا إذا استخدمت مقياس الإرجاع لتعيين نوع الحقل.
انسخ رمز الكود كما يلي:
<رسم خرائط السبات>
<اسم الفئة = "com.test.bean.Student" الجدول = "كتالوج الطالب" = "المستخدمين">
<اسم المعرف = "معرف" نوع = "عدد صحيح">
<اسم العمود = "معرف" />
<المولد />
</معرف>
<اسم الخاصية = "الاسم" نوع = "سلسلة">
<اسم العمود = "الاسم" الطول = "11" />
</خاصية>
<اسم الخاصية = "العمر" نوع = "عدد صحيح">
<اسم العمود = "العمر" />
</خاصية>
<اسم الخاصية = "الجنس" نوع = "سلسلة">
<اسم العمود = "الجنس" الطول = "2" />
</خاصية>
</فئة>
<!-- تحديد عبارة الاستعلام-->
<sql-query name="findStudentByName">
<العودة الاسم المستعار = "s">
</العودة>
<![CDATA[اختر {s.*} من الطلاب حيث s.name = :name]]>
</sql-query>
</ خريطة السبات>
ملاحظة : يمكنك أيضًا استخدام علامة <return-property/> داخل علامة <return/> لسرد جميع حقول الجدول. بنفس الطريقة الموضحة أعلاه، يتم الاستعلام عن جميع الأعمدة.
انسخ رمز الكود كما يلي:
استعلام القائمة العامة <الطالب> () {
جلسة الجلسة = HibernateSessionFactory.getSession();
Query q = session.getNamedQuery("findStudentByName");
q.setString("name", "zhangsan");
List<Student> list = q.list();
قائمة العودة؛
}
الطريقة الرابعة : استخدام استعلام SQL الأصلي <sql-query> إذا كنت تستخدم مقياس الإرجاع لتعيين نوع الحقل، فيمكنك الاستعلام عن بعض الحقول.
انسخ رمز الكود كما يلي:
<رسم خرائط السبات>
<اسم الفئة = "com.test.bean.Student" الجدول = "كتالوج الطالب" = "المستخدمين">
<اسم الهوية = "معرف" نوع = "عدد صحيح">
<اسم العمود = "معرف" />
<المولد />
</معرف>
<اسم الخاصية = "الاسم" نوع = "سلسلة">
<اسم العمود = "الاسم" الطول = "11" />
</خاصية>
<اسم الخاصية = "العمر" نوع = "عدد صحيح">
<اسم العمود = "العمر" />
</خاصية>
<اسم الخاصية = "الجنس" نوع = "سلسلة">
<اسم العمود = "الجنس" الطول = "2" />
</خاصية>
</فئة>
<!-- تحديد عبارة الاستعلام-->
<sql-query name="findStudentByName">
<return-scalar column="name" type="string"/>
<return-scalar column="age" type="integer"/>
<![CDATA[اختر s.name , s.age من الطلاب حيث s.name = :name]]>
</sql-query>
</ خريطة السبات>
القائمة العامة<Object[]> query(){
جلسة الجلسة = HibernateSessionFactory.getSession();
استعلام الاستعلام = session.getNamedQuery("findStudentByName");
query.setString("name", "zhangsan");
List<Object[]> list = query.list();
قائمة العودة؛
}
أو :
انسخ رمز الكود كما يلي:
استعلام القائمة العامة <الطالب> () {
جلسة الجلسة = HibernateSessionFactory.getSession();
الاستعلام q = session.getNamedQuery("findStudentByName").
setResultTransformer(Transformers.aliasToBean(Student.class));
q.setString("name", "zhangsan");
List<Student> list = q.list();
قائمة العودة؛
}