[Java] รู้จัก OR-Mapping และ Hibernate เบื้องต้น

          Hibernate คือ Java library ที่เพิ่มความสะดวกสะบายในการใช้งาน database เป็นอย่างมาก เป็นที่รู้จักของ Java Developer เป็นอย่างดี อีกทั้งมี community กว้างขวางมาก ๆ แบบไม่ต้องกลัวว่าถ้าติดปัญหาจะถูกทิ้งให้โดดเดี่ยวเดียวดายกันเลย

     ORM

          หรือ OR-Mapping หรือชื่อเต็มๆก็คือ Object-Relational Mapping เป็นเทคนิคการใช้ฐานข้อมูลผ่าน Object แทนการใช้ SQL ซึ่งเพิ่มความสะดวกมาก ๆ ให้เหล่าโปรแกรมเมอร์ ซึ่งบางคนก็เรียก Entity บางคนก็เรียก DTO (Data Transfer Object) สุดแล้วแต่ถนัดเลยครับ

          ปกติแล้วการใช้งาน Relational Database เราจะต้องรู้จัก TABLE, COLUMN เป็นคำคุ้นหูอยู่แล้ว ซึ่งแน่นอนว่า Class ที่จะนำมาใช้เป็นตัวแทนฐานข้อมูลนั้น ก็มีความใกล้เคียงกันด้วย (พื้นฐาน ต้องอย่าทิ้ง)

Relational Database Java Class
Table Class
Column Attribute

ลองมาดูตัวอย่างเต็ม ๆ กัน

จากตัวอย่าง ผมตั้งข้อสังเกตให้ 3 อย่าง คือ
  1. TABLE, COLUMN จะถูก mapping เข้ากับ class, attribute ผ่าน annotation 
  2. data type มีความหมายอย่างเดียวกันแต่ไม่ใช่ตัวเดียวกัน
  3. ความสัมพันธ์ของ TABLE ถูกจัดให้เป็น attribute ที่มี data type ของ class ที่สัมพันธ์กัน

Query Language

          การดึงข้อมูล (query) โดยทั่วไปเราจะต้องเขียนคำสั่ง SQL เพื่อดึงข้อมูลมาแสดงผลในรูปแบบของตาราง แต่เมื่อเราใช้ Hibernate ก็จะมีสิ่งที่คล้ายกับ SQL ให้เราสามารถ query ขึ้นมาในรูปแบบ Object ได้เลย และสามารถทำความสัมพันธ์ได้เสมือนการ JOIN ได้ด้วย

Native Query
select * from user_account a left join user_profile p on a.profile_id = p.profile_id

Hibernate Query Language (HQL)
select * from UserAccount a left join fetch a.userProfile
          สิ่งที่แตกต่างกันอย่างเห็นได้ชัดคือ ชื่อของ table เวลาเขียน HQL จะมีการอ้างอิงด้วย class หรือ attribute แทนการใช้ชื่อจริงๆของ table และ column รวมถึง syntax บางอย่างที่ต้องศึกษาเพิ่มเติม ซึ่งผลลัพธ์ของการใช้ HQL จะออกมาในลักษณะ object พร้อมใช้งานได้เลย

**ควรตั้งชื่อตาม Naming Convention ของแต่ละภาษาด้วยนะ

Persistent

          ในชั้นของการทำ Persistent นั้น จะเป็นการยุ่งเกี่ยวกับ database ทั้งสิ้น โดยเริ่มตั้งแต่การเชื่อมต่อ, การขอใช้งาน Database Connection, Transaction Control และทำคำสั่ง CRUD ต่าง ๆ ซึ่งในชั้นนี้จะประกอบด้วย DAO (Data Access Object) ซึ่งก็คือ Class ที่ทำหน้าที่ดังกล่าวนั่นเอง

การเขียน Hibernate สำหรับเรียกใช้งานแบบง่าย ๆ
 UserAccount user = new UserAccount();
 user.setUsername("LordGift");
 user.setPassword("unknown");

 try (SessionFactory sf = HibernateUtil.getSessionFactory();
      Session session = sf.openSession()) {
  Transaction tx = session.beginTransaction();
  session.saveOrUpdate(user);   


  tx.commit();

 } catch (HibernateException e) {
  log.error("can't commit transaction", e);
 }

ref
stackoverflow : DTO and DAO concepts and MVC

Facebook Comment

Popular post of 7 days

ลืมรหัสปลดล็อค Android เข้าเครื่องไม่ได้ มีทางออกครับ

[Android] เปิดเครื่องไม่ได้ โลโก้ค้าง (Boot Loop)

[Java] Java Servlet คืออะไร?