Hibernate (Chapter 1)

Hibernate Intro ကို ရှေ့မှာ ရေးပြီးပါပြီ။ ဒီမှာ သွားဖတ်လို့ရပါတယ်။

ဤ အခန်းတွင် ရိုးရှင်းလွယ်ကူသော Hibernate သင်ခန်းစာကို ပြသပေးမည် ဖြစ်ပါသည်။ ဤသင်ခန်းစာကို Eclipse တွင် သို့မဟုတ် Command Prompt တွင် ပြုလုပ်နိုင်ပါမည်။ Netbeans ပေါ်တွင် ပြုလုပ်သော လေ့ကျင့်ခန်း အဆင့်ဆင့်ကိုလဲ နောက်ဆက်တွဲ ပြသ ပေးထားပါသည်။

Configuration Hibernate

ပထမဦးစွာ Hibernate Project အတွက် Connection Pool နှင့် Transaction Management ကို ပြင်ဆင်ရပါမည်။ Connection Pool နှင့် လိုအပ်သော Setup Requirement များအတွက် hibernate.cfg.xml file ကိုပြုလုပ်ပေးဖို့ လိုအပ်ပါသည်။

နမူနာ Code မှာ

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">
	jdbc:mysql://localhost:3306/hibernate_1
    </property>
    <property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">admin</property>
  </session-factory>
</hibernate-configuration>

Property နာမည် hibernate.dialect ဆိုတာ မည်သည့် Databse ဖြင်ချိန်မည်ဟု ကြေငြာခြင်း ဖြစ်ပါသည်။ ၄င်း ချိတ်ဆက် နိုင်သော Database နှင့် Dialect များမှာ အောက်ပါ အတိုင်းဖြစ်ပါသည်။

Database Name Dialect
DB2 org.hibernate.dialect.DB2Dialect
HypersonicSQL org.hibernate.dialect.HSQLDialect
Informix org.hibernate.dialect.InformixDialect
Ingres org.hibernate.dialect.IngresDialect
Interbase org.hibernate.dialect.InterbaseDialect
Pointbase org.hibernate.dialect.PointbaseDialect
PostgreSQL org.hibernate.dialect.PostgreSQLDialect
MckoiSQL org.hibernate.dialect.MckoiDialect
Microsoft SQL Server org.hibernate.dialect.SQLServerDialect
MySQL org.hibernate.dialect.MySQLDialect
Oracle (any version) org.hibernate.dialect.OracleDialect
Oracle 9 org.hibernate.dialect.Oracle9Dialect
Progress org.hibernate.dialect.ProgressDialect
FrontBase org.hibernate.dialect.FrontbaseDialect
SAP DB org.hibernate.dialect.SAPDBDialect
Sybase org.hibernate.dialect.SybaseDialect
Sybase Anywhere org.hibernate.dialect.SybaseAnywhereDialect

Java Bean Class POJO Model ရေးသားခြင်း

POJO model (Plain Old Java Object) ဆိုသည်မှာ Java Bean ပင်ဖြစ်ပါသည်။ ၄င်းသည် Database Table သို့ Mapping လုပ်သော Class ဖြစ်ပါသည်။

နမူနာ Code

package models;
// Generated May 28, 2010 6:58:08 PM by Hibernate Tools 3.2.1.GA

/**
 * Member generated by hbm2java
 */
public class Member  implements java.io.Serializable {
     private String memberId;
     private String name;
     private String address;
     private String phone;

    public Member() {
    }

    public Member(String memberId, String name, String address, String phone) {
       this.memberId = memberId;
       this.name = name;
       this.address = address;
       this.phone = phone;
    }

    public String getMemberId() {
        return this.memberId;
    }

    public void setMemberId(String memberId) {
        this.memberId = memberId;
    }
    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }
    public String getAddress() {
        return this.address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
    public String getPhone() {
        return this.phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }
}

Mapping POJO Database Table

Member.hbm.xml file ကို ဖန်တီးပါ။ ၄င်းသည် POJO အား Database table သို့ ချိတ်ဆက်သော xml ဖြစ်ပါသည်။

နမူနာ Code မှာ

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated May 28, 2010 6:58:12 PM by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
  <class catalog="hibernate_1" name="models.Member" table="member">
    <id name="memberId" type="string">
      <column length="25" name="MemberID"/>
      <generator class="assigned"/>
    </id>
    <property name="name" type="string">
      <column length="25" name="Name" not-null="true"/>
    </property>
    <property name="address" type="string">
      <column length="45" name="Address" not-null="true"/>
    </property>
    <property name="phone" type="string">
      <column length="25" name="Phone" not-null="true"/>
    </property>
  </class>
</hibernate-mapping>
1
<p style="text-align: justify;">hibernate.cfg.xml တွင် Mapping လုပ်ပါ။</p>
<p style="text-align: justify;"><mapping> tag ကို hibernate.cfg.xml တွင် ထည့်ပါ။</p>
1
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">
	jdbc:mysql://localhost:3306/hibernate_1
    </property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">admin</property>
    <mapping resource="models/Member.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

Developing Code

Hibernate ကိုအသုံးပြု၍ Database တွင် သိမ်းဆည်းသော code ကိုရေးပါ။ ထို့သို့ရေးရာတွင် Hibernate Session ကိုနားလည်ရန် လိုအပ်ပါသည်။ နောက်အခန်းတွင် Hibernate API ကို အပြည့်အစုံ ရှင်းလင်းပေးပါမည်။ Hibernate ၏ Session သည် J2EE or J2SE application နှင့် Hibernate ကြားတွင် အလုပ်လုပ်ပေးသော အဓိက Runtime Interface ဖြစ်ပါသည်။ SessionFactory က Hibernate Session ကို hibernate.cfg.xml file ကိုဖတ်ပြီး ပြင်ဆင်နိုင်ရန် ကူညီပေးပါသည်။

/**
 * To change this template, choose Tools  Templates
 * and open the template in the editor.
*/

package controllers;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author Joe Minhan
 */

public class indexAction extends HttpServlet {

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        org.hibernate.Session hbSession = null;

        try {
           //This step will read hibernate.cfg.xml and prepare hibernate for use.
            org.hibernate.SessionFactory sessionFactory = new org.hibernate.cfg.Configuration().configure().buildSessionFactory();
            hbSession = sessionFactory.openSession();

            //Create new instance of Member entity bean and set values
            models.Member member = new models.Member();
            member.setMemberId(request.getParameter("email"));
            member.setName(request.getParameter("name"));
            member.setAddress(request.getParameter("address"));
            member.setPhone(request.getParameter("phone"));

            //Save the database
            hbSession.save(member);
        } catch(java.lang.Exception ex) {
            //Some exception throw in here!
            response.sendRedirect("success.jsp?err=" + ex.getMessage());
        } finally {
            //Actual member's information is saved in here!
            hbSession.flush();
            hbSession.close();

            response.sendRedirect("success.jsp");
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
//        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}

Facebook comments:

Leave a comment


*