பக்கங்களுடன் பணிபுரிதல்: LIMIT மற்றும் OFFSET

பெரும்பாலும், தரவுத்தளத்திலிருந்து தரவு "பக்கங்களில்" மீட்டெடுக்கப்படுகிறது. ஏனெனில் பெரிய பட்டியல்களுடன் வேலை செய்வது எப்படி வசதியானது. நாங்கள் முதலில் 1 முதல் 20 வரையிலான வரிசைகளை வினவுகிறோம், பின்னர் 21 முதல் 40 வரை, மற்றும் பல.

SQL ஆனது இந்த LIMIT மற்றும் OFFSETக்கு சிறப்பு ஆபரேட்டர்களைக் கொண்டிருப்பதால் இது மிகவும் பொதுவான சூழ்நிலையாகும்.

இந்த ஆபரேட்டர்களின் ஒப்புமைகளும் ஹைபர்னேட்டில் உள்ளன. அவர்கள் மட்டுமே உடனடியாக அவற்றை தனி முறைகள் வடிவில் செய்ய முடிவு செய்தனர்:

  • setFirstResult() என்பது OFFSET க்கு ஒப்பானது .
  • setMaxResults() என்பது LIMITக்கு ஒப்பானது .

இந்த முறைகளைப் பயன்படுத்தி கேள்விகளை எழுதுவது மிகவும் எளிதானது. 41 இலிருந்து தொடங்கும் 20 பணிகளைத் திரும்பக் கேட்கும் வினவலை எழுதுவோம். இது எப்படி இருக்கும்:

Query<EmployeeTask> query = session.createQuery( “from EmployeeTask, EmployeeTask.class);
query.setFirstResult(41);
query.setMaxResults(20);
List<EmployeeTask> resultLIst = query.list();

முடிவுகளை வரிசைப்படுத்தவும்

வினவலின் முடிவு சரங்களின் ஒரு பகுதியை எவ்வாறு பெறுவது என்பதை நாங்கள் கண்டுபிடித்தோம். அடுத்த அழுத்தமான பிரச்சினை வரிசைப்படுத்துவது.

ஹைபர்னேட்டில் வரிசைப்படுத்துவது நேரடியாக HQL வினவலில் எழுதப்பட்டு பொதுவாக எதிர்பார்க்கப்படுகிறது:

from Employee order by joinDate

நீங்கள் வரிசை வரிசையை மாற்ற விரும்பினால், நீங்கள் பழக்கமான சொற்களைப் பயன்படுத்த வேண்டும்: asc மற்றும் desc. உதாரணமாக:

from Employee order by joinDate desc

SQL இல் உள்ளதைப் போலவே, நீங்கள் பல புலங்களின்படி வரிசைப்படுத்தலாம்:

from Employee order by joinDate desc, name asc

கூடுதலாக, வரிசை புலத்தை ஒரு அளவுருவாக அனுப்பலாம்:

String hql = "from EmployeeTask where employee.name = :username order by :ord";
Query<EmployeeTask> query = session.createQuery( hql, EmployeeTask.class);
query.setParameter(“username”, “Ivan Ivanovich”);
query.setParameter(“ord”, “name”);

List<EmployeeTask> resultLIst = query.list();

HQL இல் செயல்பாடுகள்

HQL இல் SQL இல் உள்ளதைப் போலவே, நீங்கள் பல்வேறு செயல்பாடுகளைப் பயன்படுத்தலாம்.

HQL ஆதரிக்கும் மொத்த செயல்பாடுகளின் பட்டியல் இங்கே :

மொத்த செயல்பாடுகள் விளக்கம்
எண்ணிக்கை () வரிசைகளின் எண்ணிக்கையை வழங்குகிறது
தொகை () மதிப்புகளின் கூட்டுத்தொகையைக் கணக்கிடுகிறது
நிமிடம்() குறைந்தபட்ச மதிப்பை வழங்குகிறது
அதிகபட்சம்() அதிகபட்ச மதிப்பை வழங்குகிறது
சராசரி () சராசரியை வழங்குகிறது

நீங்கள் நினைவில் வைத்திருப்பது போல், மொத்த செயல்பாடுகள் குழுவுடன் இணைந்து பயன்படுத்தக்கூடியவை. Group By ஆனது SQL இல் உள்ளதைப் போலவே செயல்படுகிறது, எனவே நாங்கள் மீண்டும் செய்ய மாட்டோம்.

மற்றும், நிச்சயமாக, வழக்கமான செயல்பாடுகள் . சாதாரண செயல்பாடுகளுடன், எல்லாம் மிகவும் எளிமையானது - அவை SQL சேவையகத்தால் செய்யப்படுகின்றன, ஹைபர்னேட் அவற்றைப் பயன்படுத்தி வினவலை சரியாக உருவாக்க வேண்டும்.

எனவே, SQL சர்வர் ஆதரிக்கும் அனைத்து அம்சங்களையும் Hibernate ஆதரிக்கிறது. உங்கள் SessionFactory ஐ நீங்கள் கட்டமைக்கும் போது SQL சேவையகத்தின் வகை sqlDialect அளவுருவால் அமைக்கப்படும்.

ஒரு பயனருக்கு ஒதுக்கப்பட்ட பணிகளின் எண்ணிக்கையைக் கண்டுபிடிப்போம்:

String hql = "select count(*) from EmployeeTask where employee.name = :username ";
Query<Integer> query = session.createQuery( hql, Integer.class);
query.setParameter(“username”, “Ivan Ivanovich”);
Integer count = query.uniqueResult();