ในที่สุด Java 8 ก็มาถึงแล้วหลังจากนั้นไม่กี่ปีที่ผ่านมา Java Programmers สามารถรับการสนับสนุนการเขียนโปรแกรมที่ใช้งานได้ใน Java ใช้งานฐานข้อมูล
วิธีการทำงานของการประมวลผลข้อมูล
Java 8 ไม่เพียง แต่เพิ่มการสนับสนุนการทำงานเท่านั้น แต่ยังขยายคลาสคอลเลกชันโดยข้อมูลการประมวลผลฟังก์ชั่นใหม่
ตัวอย่างเช่นสมมติว่าคุณมีคอลเลกชันของคอลเลกชัน: ลูกค้า: ลูกค้า:
คอลเลกชัน <Customer> ลูกค้า
หากคุณสนใจลูกค้าจากเบลเยียมเท่านั้นคุณจะมีวัตถุลูกค้าทั้งหมดและบันทึกสิ่งที่คุณต้องการเท่านั้น
คอลเลกชัน <perient> Belgians = new ArrayList <() ();
ไม่เพียง แต่มีค่าใช้จ่าย 5 บรรทัด แต่มันไม่ได้เป็นนามธรรมมาก รหัสเธรดเพื่อเขียนโค้ดทั้งหมดใหม่
ด้วย Java 8 มีเพียงหนึ่งบรรทัดของรหัสที่สามารถบรรลุคุณสมบัติเดียวกันได้ เพียงแค่กรอง
cender.stream ()
รหัสของ Java 8 รุ่นข้างต้นไม่เพียง แต่จะสั้นกว่า แต่ยังเข้าใจได้ง่ายขึ้น เสียเวลาในการตีความรหัสในวงจรการตีความเพื่อทำความเข้าใจว่ามันกำลังทำอะไรกับข้อมูล
ฉันควรทำอย่างไรถ้าคุณต้องการเรียกใช้รหัสนี้พร้อมกัน?
cender.parallelsstream ()
สิ่งที่น่าตื่นเต้นกว่าคือรหัสสไตล์การทำงานนี้ยังใช้กับฐานข้อมูล
ใช้วิธีการทำงานบนฐานข้อมูล
ตามเนื้อผ้าโปรแกรมเมอร์จำเป็นต้องใช้ฐานข้อมูลพิเศษเพื่อสอบถามเพื่อเข้าถึงข้อมูลของฐานข้อมูล
PreparedStatement S = Con.preparestatement ("Select *" + "จากลูกค้า C" + "โดยที่ C.Country =?");รหัสเหล่านี้ส่วนใหญ่เป็นสตริงซึ่งจะทำให้คอมไพเลอร์ไม่พบข้อผิดพลาดและรหัสที่เร่งรีบนี้จะทำให้เกิดปัญหาด้านความปลอดภัย ให้ภาษาเคียวรีฐานข้อมูลคุณสามารถแก้ปัญหาการตรวจสอบที่ผิดและปัญหาด้านความปลอดภัย หรือใช้เครื่องมือการแมปความสัมพันธ์ของวัตถุเพื่อหลีกเลี่ยงรหัสที่น่าเบื่อจำนวนมาก แต่สามารถใช้งานได้ทั่วไปในการเข้าถึงการสอบถามทั่วไป
ใช้ Java 8 เพื่อสอบถามฐานข้อมูลโดยใช้งาน API ตัวอย่างเช่น JINQ เป็นโครงการโอเพ่นซอร์สและ API ฐานข้อมูลในอนาคตที่สำรวจสามารถทำให้การเขียนโปรแกรมใช้งานได้เป็นไปได้ นี่คือแบบสอบถามฐานข้อมูลโดยใช้ JINQ:
cementer.where (c-> c.getCountry (). เท่ากับ ("เบลเยียม");รหัสนี้เกือบจะเหมือนกับรหัสโดยใช้สตรีมมิ่ง API เมื่อรหัสทำงาน JINQ จะแปลเป็นรหัสเคียวรีฐานข้อมูลโดยอัตโนมัติเช่นเดียวกับแบบสอบถาม JDBC ก่อนหน้านี้
ในกรณีนี้แม้ว่าคุณจะยังไม่ได้เรียนรู้ภาษาเคียวรีฐานข้อมูลใหม่คุณสามารถเขียนแบบสอบถามฐานข้อมูลที่มีประสิทธิภาพ คุณสามารถใช้รหัสสไตล์เดียวกันเพื่อรวบรวมบน Java คุณไม่จำเป็นต้องมีคอมไพเลอร์ Java พิเศษหรือเครื่องเสมือน การรวบรวมรหัสทั้งหมดและทำงานบน Java 8 JDK ทั่วไป หากรหัสของคุณไม่ถูกต้องคอมไพเลอร์จะพบพวกเขาและรายงานให้คุณเช่นเดียวกับรหัส Java ธรรมดา
Jinq รองรับการสืบค้นที่ซับซ้อนเช่นเดียวกับ SQL92 อัลกอริทึมของรหัส Java แปลลงในแบบสอบถามฐานข้อมูลนั้นมีความยืดหยุ่นมากตราบใดที่มันสามารถยอมรับได้ก็สามารถแปลได้ ตัวอย่างเช่น JINQ สามารถแปลแบบสอบถามฐานข้อมูลด้านล่างแม้ว่าจะมีความซับซ้อน
ลูกค้า. (c-> c.getCountry (). เท่ากับ ("เบลเยี่ยม") CTCTCTCTCT ทำงานบทบาทของเขา งานที่ทำงานงานทำงานงานทำงานวูดที่ทำงานคนงานอื่น ๆอย่างที่คุณเห็นการเขียนโปรแกรมการทำงานของ Java 8 นั้นเหมาะสมมากสำหรับการสืบค้นฐานข้อมูล และการสืบค้นนั้นมีขนาดกะทัดรัดและการสอบถามที่ซับซ้อนอาจมีความสามารถ
การดำเนินการภายใน
แต่คุณทำงานอย่างไร? คอมไพเลอร์ Java สามัญสามารถแปลงรหัส Java เป็นแบบสอบถามฐานข้อมูลได้อย่างไร มีอะไรพิเศษเกี่ยวกับ Java 8 ที่จะทำให้สิ่งนี้เป็นไปได้?
กุญแจสำคัญในการสนับสนุน PIs ฐานข้อมูลใหม่เหล่านี้ที่สนับสนุนฟังก์ชั่นเหล่านี้คือวิธีการวิเคราะห์แบบไบต์ที่เรียกว่า "การดำเนินการเชิงสัญลักษณ์" แม้ว่ารหัสของคุณจะถูกรวบรวมโดยคอมไพเลอร์ Java ธรรมดาและทำงานในเครื่องเสมือน Java ธรรมดา Jinq สามารถวิเคราะห์และสร้างแบบสอบถามฐานข้อมูลจากมันเมื่อคุณรวบรวมรหัส Java เมื่อใช้ Java 8 Streams API มักพบว่าเมื่อวิเคราะห์ฟังก์ชั่นสั้น ๆ ผลการทำงานของการดำเนินการเชิงสัญลักษณ์นั้นดีที่สุด
เพื่อให้เข้าใจว่าการดำเนินการเชิงสัญลักษณ์นี้ทำงานอย่างไรวิธีที่ง่ายที่สุดคือการใช้ตัวอย่าง ลองตรวจสอบว่ามีการแปลงคำค้นหาต่อไปนี้เป็นภาษาคิวรี SQL โดย JINQ:
ลูกค้า. ที่ไหน (c-> c.getCountry (). เท่ากับ ("เบลเยียม")))))))))))) เริ่มแรกตัวแปรลูกค้าเป็นคอลเลกชันและเคียวรีฐานข้อมูลที่สอดคล้องกันคือ:
เลือก * จากลูกค้า c
จากนั้นวิธีการที่ () เรียกว่าและฟังก์ชั่นจะถูกส่งผ่านไป ในวิธีการที่ () JINQ จะเปิดไฟล์. class ของฟังก์ชั่นนี้เพื่อให้ได้รหัสไบต์ที่รวบรวมโดยฟังก์ชั่นนี้เพื่อการวิเคราะห์ ในตัวอย่างนี้อย่าใช้รหัสไบต์จริงให้เราใช้คำแนะนำง่าย ๆ เพื่อแสดงรหัสไบต์ของฟังก์ชันนี้:
d = c.getCountry () e = "เบลเยียม" e = d.equals (e) return e
ที่นี่เราคิดว่าฟังก์ชั่นได้รวบรวมโดยคอมไพเลอร์ Java เป็นคำแนะนำทั้งสี่นี้ เมื่อมีการเรียกวิธีการที่ () Jinq จะเห็นสิ่งเหล่านี้ Jinq จะเข้าใจรหัสเหล่านี้ได้อย่างไร?
Jinq ถูกวิเคราะห์โดยการดำเนินการรหัส แต่ Jinq ไม่เรียกใช้รหัสโดยตรง มันเป็นรหัสการทำงาน "นามธรรม": ไม่มีตัวแปรจริงและค่าจริง Jinq ใช้สัญลักษณ์เพื่อระบุค่าทั้งหมดเมื่อเรียกใช้รหัส นี่คือเหตุผลที่การวิเคราะห์นี้เรียกว่า "การดำเนินการเชิงสัญลักษณ์"
JINQ ดำเนินการแต่ละคำสั่งและติดตามทุกสิ่งที่ผลข้างเคียงทั้งหมดหรือการเปลี่ยนแปลงรหัสระหว่างสถานะโปรแกรม ต่อไปนี้เป็นแผนภูมิที่แสดงผลข้างเคียงทั้งหมดที่พบเมื่อ Jinq ดำเนินการรหัสสี่บรรทัดในการดำเนินการเชิงสัญลักษณ์
ตัวอย่างการดำเนินการเชิงสัญลักษณ์
ในรูปที่คุณจะเห็นว่าหลังจากคำสั่งแรกกำลังทำงาน JINQ ค้นพบผลข้างเคียงสองอย่าง: ตัวแปร D มีการเปลี่ยนแปลงและวิธีการลูกค้า. getCountry () ถูกเรียก เนื่องจากเป็นการดำเนินการเชิงสัญลักษณ์ตัวแปร D ไม่ได้ให้คุณค่าที่แท้จริงของจริงเช่น "สหรัฐอเมริกา" หรือ "เดนมาร์ก" ซึ่งได้รับมอบหมายให้เป็นค่าสัญลักษณ์ของ C.GetCountry ()
หลังจากดำเนินการคำแนะนำทั้งหมดเหล่านี้แล้วผลข้างเคียงของ JINQ ก็มีความคล่องตัว เนื่องจากตัวแปร D และ E เป็นตัวแปรท้องถิ่นตัวแปรใด ๆ จะถูกยกเลิกหลังจากออกจากฟังก์ชันดังนั้นผลข้างเคียงเหล่านี้จึงสามารถละเว้นได้ Jinq ยังรู้ว่า customer.getCountry () และ string.equals () ไม่ได้แก้ไขตัวแปรใด ๆ หรือแสดงผลลัพธ์ใด ๆ ดังนั้นวิธีการเหล่านี้สามารถละเว้นได้ เป็นผลให้ JINQ สามารถสรุปได้ว่าฟังก์ชั่นนี้จะสร้างบทบาทเดียวและมันจะกลับมา C.GetCountry ()
เมื่อ Jinq เข้าใจฟังก์ชั่นที่ส่งผ่านไปในวิธีการที่ () มันสามารถผสมความรู้เกี่ยวกับการสืบค้นฐานข้อมูลและให้แบบสอบถามฐานข้อมูลใหม่ในคอลเลกชันลูกค้า
สร้างแบบสอบถามฐานข้อมูล
นี่คือวิธีที่ JINQ สร้างแบบสอบถามฐานข้อมูลจากรหัสของคุณ การใช้การดำเนินการเชิงสัญลักษณ์หมายความว่าวิธีนี้ค่อนข้างทรงพลังสำหรับโหมดรหัสที่แตกต่างจากคอมไพเลอร์ Java ที่แตกต่างกัน หากรหัสที่พบโดย JINQ มีผลข้างเคียงที่ไม่สามารถแปลงเป็นแบบสอบถามฐานข้อมูล JINQ จะทำให้รหัสของคุณไม่เปลี่ยนแปลง เนื่องจากทุกอย่างเขียนด้วยรหัส Java ปกติ JINQ จึงสามารถเรียกใช้รหัสเหล่านั้นได้โดยตรงและรหัสของคุณจะสร้างผลลัพธ์ที่คาดหวัง
ตัวอย่างการแปลง่าย ๆ นี้ควรให้คุณเข้าใจวิธีการสอบถามการแปล คุณสามารถมั่นใจได้ว่าอัลกอริทึมเหล่านี้สามารถสร้างแบบสอบถามฐานข้อมูลได้อย่างถูกต้องจากรหัสของคุณ
โอกาสที่สวยงาม
ฉันหวังว่าฉันจะให้คุณได้ลิ้มรสงานฐานข้อมูลใหม่ที่นำโดย Java 8 ใน Java การเขียนโปรแกรมฟังก์ชั่นที่รองรับโดย Java 8 ช่วยให้คุณสามารถเขียนโค้ดสำหรับฐานข้อมูลเพื่อเขียนรหัสสำหรับคอลเลกชัน Java หวังว่า API ฐานข้อมูลที่มีอยู่จะขยายออกไปเพื่อสนับสนุนการสืบค้นประเภทนี้