जावा के लिए एक LINQ उपयोगी उपकरण होगा? मैं ऐसे टूल पर काम कर रहा हूं जो किसी जावा ऑब्जेक्ट को किसी डेटाबेस में पंक्ति में मैप करने की अनुमति देगा।जावा उपकरण के लिए LINQ
- क्या यह जावा प्रोग्रामर के लिए उपयोगी होगा?
- क्या विशेषताएं उपयोगी होंगी?
जावा के लिए एक LINQ उपयोगी उपकरण होगा? मैं ऐसे टूल पर काम कर रहा हूं जो किसी जावा ऑब्जेक्ट को किसी डेटाबेस में पंक्ति में मैप करने की अनुमति देगा।जावा उपकरण के लिए LINQ
जावा के लिए LINQ सुंदर होगा, लेकिन समस्या भाषा एकीकरण है।
जावा में लैम्ब्डा अभिव्यक्ति के रूप में संक्षेप में कुछ भी नहीं है, और वे LINQ के आधारों में से एक हैं। मुझे लगता है कि वे विस्तार कर सकते हैं सामान्य जावा के शीर्ष पर क्वेरी अभिव्यक्ति समर्थन लैम्बडा अभिव्यक्तियों के बिना, विस्तार को अज्ञात आंतरिक कक्षाएं बनाकर - लेकिन यह बहुत ही भयंकर हो जाएगा। यदि आप LINQ से SQL जैसे कुछ भी करना चाहते हैं तो आपको अभिव्यक्ति पेड़ की भी आवश्यकता होगी।
चेक अपवाद रास्ते में आ सकता है, लेकिन हमें देखना होगा। IQueryable के समतुल्य को सामान्य प्रकार के सामान्य अपवाद की आवश्यकता होगी - या संभवतः यह तत्व प्रकार और अपवाद प्रकार दोनों में सामान्य हो सकता है ...
वैसे भी, यह सब पाई-इन-द-आकाश है - जावा समुदाय को बंद होने के साथ होने वाली परेशानी के कारण, मुझे लगता है कि जावा में LINQ जैसे कुछ भी 2012 की तुलना में पहले ही उम्मीद करनी होगी। बेशक, यह कहना नहीं है कि यह "जावा जैसी" में संभव नहीं होगा भाषा। उदाहरण के लिए, ग्रोवी के पास पहले से ही कुछ उपयोगी पहलू हैं।
लाइब्रेरी पक्ष के लिए, हाइबरनेट पहले से ही LINQ से SQL की कई सुविधाओं का "गैर-एकीकृत" संस्करण प्रदान करता है। LINQ से ऑब्जेक्ट्स के लिए, आपको Google Java Collections API पर देखना चाहिए - यह एक ही तरह की चीज़ (फ़िल्टरिंग, प्रोजेक्टिंग इत्यादि) है। लैम्बडास के बिना, यह निश्चित रूप से उपयोग करने के लिए बहुत ही कठिन है - लेकिन यह वास्तव में वास्तव में आसान है। (मैं काम पर हर समय Google संग्रह कोड का उपयोग करता हूं, और मुझे "वेनिला" जावा संग्रह पर वापस जाने से नफरत है।)
जावा समुदाय बंद होने के साथ क्या समस्याएं हैं? – Claudiu
@ क्लाउडियो: कई प्रस्ताव, उनमें से कोई भी पूरी तरह से संतोषजनक नहीं है। आखिरकार मैंने सुना कि यह संभावना नहीं है कि यह बहुत अधिक चर्चा के कारण जावा 7 में भी पहुंच जाएगा। यह जावा का नकारात्मक हिस्सा इतना लोकतांत्रिक है। –
Google संग्रह एपीआई में प्रोजेक्टिंग का उदाहरण कहां है? –
हाइबरनेट एचक्यूएल का उपयोग करता है। आप वस्तु क्या कर सकते हैं, लेकिन केवल संबंधपरक डेटाबेस
के लिए यह ध्यान देने योग्य है कि Scala 2.8 is going to have LINQ support ...
वास्तव में, स्केला standart संग्रह एपीआई कि LINQ के लिए वस्तुओं कुछ अर्थों में की तरह काम करता प्रदान करते हैं लायक है। यहाँ उदाहरण है:
List("Paris","Berlin","London","Tokyo")
.filter(c => c.endsWith("n"))
.map(c => c.length)
// result would be length of the words that ends
// with "n" letter ("Berlin" and "London").
नई लाइन-डॉट के डर नहीं है वाक्य रचना: आप सादे पुराने शैली में कोड लिख सकते हैं:
Array(1,2,3,4,5,6).map(x => x*x)
और वहाँ परियोजनाओं है कि प्रदान की एक संख्या है LINQ-to-SQL वाक्यविन्यास के करीब। उदाहरण के लिए, Squeryll से लिया स्निपेट:
import Library._
using(session) {
books.insert(new Author(1, "Michel","Folco"))
val a = from(authors)(a=> where(a.lastName === "Folco") select(a))
}
// but note that there is more code behind this example
अभी तक ऐसा नहीं लगता है, लेकिन यहां उम्मीद है। स्कैला ने भाषा में एक्सएमएल को एकीकृत करने की तरह पहले महान काम किया है। और मुझे उम्मीद है कि यह बेहतर हो जाएगा :) –
मुद्दे के लिए एक अधिक सामान्य दृष्टिकोण के लिए, Querydsl उपयोग करने पर विचार।
यह जेपीए/हाइबरनेट, जेडीओ, एसक्यूएल और जावा संग्रह बैकएंड के लिए समर्थन के साथ एक LINQ- शैली वाक्यविन्यास प्रदान करता है।
मैं क्वेरीडल के रखरखावकर्ता हूं, इसलिए यह उत्तर पक्षपातपूर्ण है।
ए सी # -like समाधान JaQue है। डोमेन विशिष्ट LINQ प्रदाताओं डोमेन क्या गुम है।
जावा के लिए एक एक्सटेंशन जो LINQ-to-ऑब्जेक्ट क्षमताओं को देता है SBQL4J है। यह प्रदान करता है:
बेबी कदम:
एक पहले दृष्टिकोण: जावा LINQ भाव के लिए तार का उपयोग कर, लैम्ब्डा के बजाय लागू।
स्ट्रिंग एक्सप्रेशन के आधार पर IQueryProviders
लिखें।
फिर, सीधे भाषा में स्ट्रिंग अभिव्यक्ति जोड़ने के लिए आगे बढ़ें।
लेकिन पहले, मैं एक LINQ कि काम करता हैं: आपके द्वारा लिखे गए LINQ भाषा में, यह एक अच्छी बात यह है है, लेकिन मुख्य बात यह है: एक तरह से IQueryProviders
लिखने के लिए है, तो, POJO रों के लिए एक प्रदाता, हाइबरनेट के लिए एक प्रदाता बारे में , एसक्यूएल सर्वर या ओरेकल, आदि के लिए प्रदाता ...
Siena प्रोजेक्ट अच्छा लगता है।
LINQ से ऑब्जेक्ट्स के लिए, इसे जांचें: github.com/nicholas22/jpropel-light, असली उदाहरण: नया स्ट्रिंग [] {"जेम्स", "जॉन", "जॉन", "एडी"}। कहीं (शुरू होता है ("j")) toList() अलग()।। –
स्कैला LINQ: https://github.com/nicholas22/propelS – Scooterville