วันอาทิตย์ที่ 26 กรกฎาคม พ.ศ. 2558

ทบทวน Hibernate หลังจากทิ้งไปสองปีครึ่ง



ทบทวน Hibernate หลังจากทิ้งไปสองปีครึ่ง
part 1: กลับมาเถิดความทรงจำที่รัก

>> ฐานข้อมูลกับสารพัดทฤษฎีของมันเป็นเรื่องที่ผมรักน้อยที่สุดในประดาศาสตร์วิทยาการคอมฯ เพราะมันไม่ได้โค้ด? ไม่สิ บางคนบอกผมว่า มันก็ภาษา SQL นะพี่

>> ก่อนไปเกณฑ์ทหารสักหกเดือนได้ที่เคยเรียนเรื่องนี้ควบคู่กับการโค้ดจาวา โดยอาศัยเครื่องมือไลบรารี่ที่ชื่อ Hibernate คืนที่ผ่านมาผมพยายามทบทวนเพื่อนำมันกลับมาจากอดีต นั่นยิ่งกว่าคลาน...

>> ผมเริ่มด้วยการศึกษา SQLite ในแง่ของภาษา SQL พื้นฐาน พี่ที่ทำงานมาเจอเข้าก็ถามว่า อ่าวเอ็งจะเขียน Android เหรอ ผมตอบไม่ครับ ผมแค่ลืม นั่นแหละยิ่งกว่าคลาน...

>> ผมศึกษา Hibernate จากเว็บไซต์นี้
http://www.tutorialspoint.com/hibernate/index.htm

>> Hibernate ในที่นี้คือความคิดหลักการแก้ปัญหาด้วยวิธีการ Object-Relational mapping (ORM) จับจาวาคลาสเข้ากับตารางในฐานข้อมูล แปลงชนิดข้อมูลของภาษาจาวา (java data type) ไปสู่ชนิดข้อมูลของ SQL (sql data type) แล้วทำไมต้องใช้ Hibernate?

>> เพราะ Hibernate เป็นฟีเจอร์หนึ่งที่ออกแบบมาเพื่อช่วยให้เราใช้งานแบตเตอรี่ของโน้ตบุ๊คได้นานขึ้น? ไม่ใช่แล้ว ผิดเรื่อง

>> ร้อยเปอร์เซ็นต์สำหรับงานที่เกี่ยวข้องกับฐานข้อมูลที่ต้องใช้ภาษาจาวาจัดการก็จะมีการเขียน sql สั่งทำโน่นนี่นั่น เช่น ไหนเอารายชื่อสินค้ามาดูหน่อย ปรับปรุงราคาสินค้าหน่อยสิ เพิ่มสินค้าชิ้นนี้หรือยัง นั่นๆสินค้านี่หมดสต๊อกแล้วช่วยเอาออกจากรายการโปรโมชั่นที สารพัด ฯลฯ หรือเรียก sql ที่ถูกสร้างไว้แล้วในลักษณะโมดูลมาทำงานเป็นต้น โปรแกรมเมอร์ก็ต้องมานั่งเขียน sql หรือขอ sql จากทีมหรือผู้ที่มีหน้าที่เขียนให้โดยตรงมาใช้ โค้ดจาวาของโปรแกรมเมอร์ผู้น่าสงสารก็จะเต็มไปด้วยคำสั่ง sql มากมาย (ที่ถูกจัดระเบียบเป็นอย่างดี)

>> ฮั่นแน่ยังมีหลักการ CRUD ช่วยได้ เขียนแยก sql ออกเป็นส่วนๆ ได้แก่ create, read, update และ delete แล้วส่งออบเจ็กต์จาวาเข้าไป มันก็โอเครนะ แต่จะดีกว่าไหมในเมื่อเราก็เขียนภาษาจาวาอยู่แล้วและต่อจากนี้สามารถกำหนดให้ออบเจ็กต์เหล่านั้นทำงาน sql ได้เลยโดยปราศจากโค้ด sql อันน่าสะพรึงกลัว โฮ้อะไรกันนี่! สวดยอด! อีกขีดขั้นของ high-performance Object/Relational persistence ก็โม้ไปมันส์ๆ

>> ครับ ก็หาเครื่องมือ (tool) มาใช้ หนึ่งในความคิดพัฒนาระบบ object-oriented ให้เข้าใจ relational database ก็คือวิธีการ ORM และหนึ่งชื่อจาวาคลาสไลบรารี่ที่ implement (ทำให้เกิดขึ้นจริง หรือนำมาใช้) ก็คือ Hibernate

>> ตามไปโหลดประดา .jar ไฟล์ก่อนได้ที่
http://www.hibernate.org/downloads
ของผม ณ ขณะนี้คือ
hibernate-release-4.3.10.Final

>> เปิด Eclipse (ของผมคือรุ่น Luna) สร้างจาวาโปรเจ็กต์ชื่อ ProteinTracker บอกแล้วว่ารื้อฟื้นความจำ คือยังเก็บโปรเจ็กต์เก่าๆที่รุ่นพี่เคยสอนไว้อยู่ ก็เลยต้องโค้ดใหม่แบบลอกทั้งดุ้น
- สร้าง main class ชื่อ Program
- RDBMS ที่ใช้คือ MySQL เปิดด้วย MySQL Workbench
- ฐานข้อมูล (มันเรียกว่า schema) ตั้งชื่อว่า protein_tracker
- สร้างตารางชื่อ users ประกอบไปด้วย id, name, total และ goal
- กลับมาสร้าง POJO หรือก็คือจาวาคลาสธรรมดาชื่อ User ให้ประกอบไปด้วย id, name, total และ goal
- สร้าง xml configuration file ในฝั่ง Hibernate ชื่อ hibernate.cfg.xml ใช้ควบคุมทั้งโปรเจ็กต์
- ต่อด้วย User.hbm.xml ให้ config จาวาคลาสเข้ากับตารางในฐานข้อมูลข้างต้น ในที่นี้ก็คือคลาส User กับตาราง users
- ลงทะเบียนให้ hibernate.cfg.xml รู้จัก User.hbm.xml
- สร้างออบเจ็กต์จากคลาส User ระบุชื่อเป็น I am Phai Panda แล้วสั่งให้บันทึกลงฐานข้อมูลก่อนจะ close session
- รัน
- ไปดูที่ฐานข้อมูล เย้ ข้อมูลมาแล้ว เย้ๆ

>> กระบวนการพื้นฐานที่สุดที่ทำให้เห็นภาพว่า Hibernate ด้วยจาวาโค้ดหน้าตาเป็นอย่างไรก็มีขั้นตอนดังที่ได้เล่าไปครับ part ต่อๆไปค่อยมาลงรายละเอียดกันว่าแต่ละส่วนคืออะไร ทำงานอย่างไร (ถ้าผมแปลภาษาอังกฤษถูกนะ ฮ่า)

>> ขอบคุณ Wiki สำหรับนิยาม CRUD
https://en.wikipedia.org/wiki/Create,_read,_update_and_delete

ไม่มีความคิดเห็น:

แสดงความคิดเห็น