Persistence Layer dengan Hibernate


Pada artikel lain yang di posting dalam blog ini sudah memberikan gambaran sekilas mengenai permasalahan Object persistent layer dalam pemrograman berorientasi object. Pada artikel lain kita juga sempat membahas sebentar mengenai Hibernate, salah satu object persistent layer framework. Sebenarnya ada banyak persitence framework terutama yang ditulis dengan menggunakan bahasa pemrograman java, seperti oracle top link, kodo, EJB (Enterprise Java Bean) dan lain sebagainya. Hibernate banyak digunakan karena lebih simple dibandingkan EJB/EJB 2, sehingga tidak salah jika spesifikasi EJB 3 yang akan di luncurkan banyak mengadopsi hibernate.

Kali ini kita akan membahas bagaimana menggunakan hibernate sebagai object persistent layer diartikel yang akan datang Insya Allah akan dibahas tentang integrasi hibernate dengan web framework java yang lain seperti spring dan JSF.

Download release terbaru hibernate, extract file hasil download tersebut di sembarang direktori di komputer anda. Gunakan java IDE supaya produktivitas pemrograman anda menjadi lebih baik daripada menggunakan teks editor. Ada berbagai macam IDE untuk pemrograman java dari yang gratisan tapi kualitasnya sangat bagus seperti eclipse, netbeans, java sun studio, jdeveloper maupun yang berbayar seperti IntelliJ, Borland JBuilder, IBM Websphere dam lainnya. Saya sendiri menggunakan eclipse sebagai tool sehari-hari.

Tahap pertama yang dilakukan adalah menentukan domain model. Pada tahap ini dibuat class mapping, class model, dan hibernate configuration. Sebagai contoh kasus kita menggunakan sebuah domain model aplikasi yaitu class User yang disimpan dalam tabel Users di database.

Hibernate dapat mengenali sebuah domain model dengan berbagai cara, yang pertama adalah membuat file mapping yang berupa xml (dinamai standar xxx.hbm.xml) atau meregister langsung dari java class. Cara terbaik adalah dengan membuat file mapping, karena kita akan lebih melihat relasi antar class-class model seperti kalau kita mendesain sebuah Entity Relation Diagram database. Berikut ini adalah file mapping User.hbm.xml kali ini kita menggunakan tabel tanpa relasi dengan tabel yang lain.


<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

<class name="gpm.promeasys4.company.model.User" table="users"lazy="false">

<id name="userCode" type="long">

<column name="USER_CODE" />

<generator

class="org.hibernate.id.MultipleHiLoPerTableGenerator">

</generator>

</id>

<property name="userName" type="string">

<column name="USER_NAME" length="25" />

</property>

<property name="employeeName" type="string">

<column name="EMPLOYEE_NAME" length="25" />

</property>

<property name="password" type="string">

<column name="PASSWORD" length="100" />

</property>

<property name="emailAddress" type="string">

<column name="EMAIL_ADDRESS" length="100" />

</property>

</property>

<property name="description" type="string">

<column name="DESCRIPTION" length="100" />

</property>

</property>

<property name="status" type="integer">

<column name="STATUS" />

</property>

</class>

</hibernate-mapping>

Selanjutnya adalah mengenerate File java class dengan menggunakan bantuan Middlegen atau dengan menggunakan hibernate versi 2 (hibernate versi 3.0 ke atas tidak menyediakan tool untuk mengenerate file class java). berikut ini merupakan file User.java hasill generate dari User.hbm.xml


package test.hibernate.model

/** @author Hibernate CodeGenerator */

public class User implements Serializable {

/** identifier field */

private long userCode;

/** nullable persistent field */

private String userName;

private String employeeName;

private String password;

private String emailAddress;

private String description;

private Integer status;
/** full constructor */

public User(String userName, String employeeName, String password,
String emailAddress, String description, Integer status) {
this.userName = userName;
this.employeeName = employeeName;
this.password = password;
this.emailAddress = emailAddress;
this.description = description;
this.status = status;
}
/** default constructor */

public User() {
}
public long getUserCode() {
return this.userCode;
}
public void setUserCode(long userCode) {
this.userCode = userCode;
}
public String getUserName() {
return this.userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getEmployeeName() {
return this.employeeName;
}
public void setEmployeeName(String employeeName) {
this.employeeName = employeeName;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmailAddress() {
return this.emailAddress;
}
public void setEmailAddress(String emailAddress) {
this.emailAddress = emailAddress;
}
public String getDescription() {
return this.description;
}
public void setDescription(String description) {
this.description = description;
}
public Integer getStatus() {
return this.status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String toString() {
return new ToStringBuilder(this)
.append("userCode", getUserCode())
.toString();
}
}

Selanjutnya adalah melakukan generate file sql yang digunakan untuk membuat Table dalam database. Karena perintah SQL ada yang spesifik menurut database, maka perlu didefinisikan file hibernate.properties. Dalam contoh ini digunakan database MySQL. Berikut ini adalah konfigurasi file hibernate.properties:


############## HIBERNATE.PROPERTIES ###################

hibernate.show_sql=falsehibernate.dialect=org.hibernate.dialect.MySQLDialect

hibernate.use_outer_join=true

hibernate.connection.driver_class=com.mysql.jdbc.Driver

hibernate.connection.url=jdbc:mysql://localhost/hibernate_test?autoReconnect=true

hibernate.connection.username=heru

hibernate.connection.password=heru

hibernate.connection.pool_size=20

hibernate.statement_cache.size=30

##################################################

file hibernate.properties ini nantinya juga akan digunakan dalam aplikasi, untuk saat ini digunakan untuk melakukan generate DDL SQL. set nilai parameter hibernate.show_sql menjadi "true" untuk menentukan apakah statement DDL SQL yang dibuat hibernate ditampilkan. hibernate.dialect digunakan untuk menentukan dialect SQL database yang digunakan. Hibernate menyediakan AntTask yang bisa digunakan untuk mengenerate file DDL SQL, yaitu class org.hibernate.tool.hbm2ddl.SchemaExportTask atau bisa menjalankan class org.hibernate.tool.hbm2ddl.SchemaExport dari program java atau bisa juga menggunakan Middlegen maupun XDoclet. Berikut ini adalah file DDL SQL hasil generate:


#

# Table structure for table 'users'

#

DROP TABLE IF EXISTS users;

CREATE TABLE users (

USER_CODE bigint(20) NOT NULL default '0',

USER_NAME varchar(25) default NULL,

EMPLOYEE_NAME varchar(255) default NULL,

PASSWORD varchar(100) default NULL,

EMAIL_ADDRESS varchar(255) default NULL,

DESCRIPTION varchar(255) default NULL,

STATUS int(11) default NULL,

PRIMARY KEY  (USER_CODE)

) ;

Selanjutnya adalah membuat class Data Akses Object yang digunakan untuk mengakses field-field yang ada di table users. Yang pertama kali harus dlakukan adalah membuat SessionFactory, sebelum SessionFactory dibuat terlebih dahulu harus melakukan membuat instance dari class org.hibernate.cfg.Configuration yang digunakan untuk melakukan konfigurasi file-file hbm.xml dan lainnya. berikut ini adalah potongan program untuk inisialisasi hibernate:


FileInputStream fis = new FileInputStream(new File("test/hibernate/model/hibernate.properties"));

Properties prop = new Properties();

prop.load(fis);

fis.close();Configuration config = new Configuration();

config.addResource("test/hibernate/model/User.hbm.xml");

config.setProperties(prop) ;

SessionFactory factory = config.buildSessionFactory();

Berikut ini adalah contoh code program yang digunakan untuk menyimpan Object User ke database:

Session sess = factory.openSession();
Transaction transac = sess.beginTransaction();
User user = new User();
//set properties user kecuali userCode karena usercode akan digenerate langsung oleh
//hibernate. Lihat kembali konfigurasi file User.hbm.xml diatas
user.setUserName("heru");
.
.
user.setDescription("coba coba pake hibernate");
sess.save(user);
transac.commit();

sess.close();

Berikut ini contoh code program untuk melakukan update user:

// update user dengan code = 1
Session sess = factory.openSession();

Transaction trx = sess.beginTransaction();
User user = (User) sess.load(User.class, new Long(1));
user.setUserName("heru eko susanto") ;
trx.commit();
sess.close();

Bagaimana ? mudah bukan…selamat mencoba.
monggo di lanjut………….

5 thoughts on “Persistence Layer dengan Hibernate

  1. “Hibernate dapat mengenali sebuah domain model dengan berbagai cara, yang pertama adalah membuat file mapping yang berupa xml (dinamai standar xxx.hbm.xml) atau meregister langsung dari java class.”

    Saya ingin meminta satu contoh dari cara kedua yaitu meregister langsung dari java class.

  2. aku dah coba pake hibernate… tapi masih bingung mengenai pattern yang baik untuk digunakan pada orm ini… tolong dijelasin bagaimana memakainya menjadi sebuah class oop yang lossy coupled…

  3. Artikel yang menarik…
    Mas maaf, agak tulalit nie, maksudnya persistence layer apa ya..? saya taunya cma MVC.. nah terus persistence layer berada dimana ya,terus kalau semisal menggunakan JDBC apakah bisa disebut dengan persistent juga,terimakasih….

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s