Mengenal Anotasi Pada Hibernate

Mei 3, 2010 pukul 8:53 am | Ditulis dalam java, programming, teknologi | 2 Komentar
Tag: , , , , , ,

Sekarang saya akan membagi pengetahuan saya tentang penggunaan anotasi Hibernate pada Java. Saya membuat contoh sederhana kelas ruangan. Tetap ya saya masih setia dengan Netbeans 6.8 hehe.

Langkah pertama buat projek baru caranya
>buka File > New Project > Choose Java > pilih Java Application
>klik Next > isikan nama userHb > lalu Finish

Kemudian buat paket-paket:
>buat paket com.model, klik kanan Source Packages > pilih New > Java package dan beri nama com.model
>buat paket com.dao untuk interface CRUD  dan com.dao.impl sebagai implementasi dari com.dao  caranya sama dengan diatas

Sekarang kita buat kelas modelnya.
Klik kanan paket com.model > pilih new > java class dan beri nama Ruangan
Dan ketikkan source code sebagai berikut:

package com.absensi.model.master;

import java.io.Serializable;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;

/**
*
* @author dhediee
*/
@Entity
@Table(name=”ruangan”)
@org.hibernate.annotations.Entity(dynamicInsert = true, dynamicUpdate = true)
@org.hibernate.annotations.BatchSize(size = 10)

public class Ruangan implements Serializable {

@Id
@Column(name=”nama_ruangan”,length=100,nullable=false,unique=true)
private String namaRuangan;
private String keterangan;

public String getNamaRuangan() {
return namaRuangan;
}

public void setNamaRuangan(String namaRuangan) {
this.namaRuangan = namaRuangan;
}

public String getKeterangan() {
return keterangan;
}

public void setKeterangan(String keterangan) {
this.keterangan = keterangan;
}

@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}

@Override
public boolean equals(Object obj) {
return EqualsBuilder.reflectionEquals(this, obj);
}

@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}

}

Setelah spesifikasi final EJB3 ini keluar, yaitu dengan datangnya standar Java Persistence API atau JPA sebagai salah satu dari spesifikasi inti dari EJB3. Dimana sebenarnya JPA ini adalah versi anonasi dari ORM metadata. ORM mengganti XML nya menjadi perintah anotasi didalam Java. Akibat dari standar EJB3 yang bernomor JSR 220 ini, telah membuat teknologi Hibernate, Toplink dan Kodo, yang semuanya adalah teknologi ORM, menjadi inti dari EJB3. Untuk Hibernate, agar Hibernate dapat menjadi EJB3 harus melakukan integrasi antara Hibernate core, Hibernate annonation dan Hibernate entity manager. Jadi anotasi pada Hibernate sama dengan anotasi JPA.

anotasi @Entity  berguna untuk menandai bahwa kelas tersebut adalah sebuah kelas entity/entitas
anotasi @Table(name=”ruangan”) untuk membuat tabel di dalam database
anotasi @Id untuk menandakan bahwa property yang diberikan @Id sebagai primary key
anotasi @Column untuk membuat kolom dari property tersebut dan memberikan nilai unique dan not null

Kemudian pada paket com.dao buat source code sebagai berikut

package com.dao;

import com.model.Ruangan;
import java.util.List;

public interface RuanganDao {

public void saveOrUpdate(Ruangan ruangan);
public void delete(Ruangan ruangan);
public List<Ruangan> getAllRuangan();
}

Lalu pada paket com.dao.impl

package com.dao.impl;

import com.dao.RuanganDao;
import com.model.Ruangan;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository(“ruanganDao”)
public class RuanganDaoImpl implements RuanganDao {

private SessionFactory sessionFactory;

@Autowired
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}

public void saveOrUpdate(Ruangan ruangan) {
this.sessionFactory.getCurrentSession().merge(ruangan);
}

public List<Ruangan> getAllRuangan() {
return sessionFactory.getCurrentSession().createQuery(“from Ruangan r”).list();
}

public void delete(Ruangan ruangan) {
this.sessionFactory.getCurrentSession().delete(ruangan);
}
}

anotasi @Autowired digunakan untuk menginjeksikan session yang akan dipanggil melalui applicationContext untuk berhubungan dengan database
Untuk mendapatkan semua ruangan kita buat query menggunakan Hibernate Query Language atau HQL yaitu .createQuery(” from Ruangan  r”). HQL ini dalam MySQL sama dengan select * form ruangan.

Buat paket tes di root Test Packages caranya klik kanan root test Pkages > klik kanan> new > java packages > dan beri nama com.tes.
Buat class baru dan beri nama TesRuangan.java lalu ketikkan source berikut.

package com.tes;

import com.dao.RuanganDao;
import com.model.Ruangan;
import javax.annotation.Resource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit38.AbstractTransactionalJUnit38SpringContextTests;
import org.springframework.test.context.transaction.TransactionConfiguration;

@ContextConfiguration(locations = {“applicationContext.xml”})
@TransactionConfiguration(transactionManager = “transactionManager”)
public class TesRuangan extends AbstractTransactionalJUnit38SpringContextTests {

private static final Log log = LogFactory.getLog(TesRuangan.class);
@Resource
private RuanganDao ruanganDao;

public void testCreateTable() {
log.info(“membuat tabel”);

Ruangan ruang = new Ruangan();
ruang.setNamaRuangan(“H20”);
ruang.setKeterangan(“Untuk kuliah Rekayasa perangkat Lunak”);
}
}

Untuk menguji mapping kelas ini cukup dengan menginjeksikan kelas Dao pada paket com.dao menggunakan anotasi @Resource. Setelah tabel digenerate data String yang dipanggil untuk namaRuangan dan keterangan masih berniali null karena kita baru implementasi sampai pada membuat tabel. nanti saya buatkan kelas Service untuk memasukkan data pada field dan membuat kelas Controller untuk mengolah CRUD di View.

Kemudian buat file applicationContext di paket com.tes. Klik kanan pilih new > Other > pilih kategori Other > pilih Spring XML Configuration file beri nama applicationContext

<?xml version=”1.0″ encoding=”UTF-8″?>
<beans xmlns=”http://www.springframework.org/schema/beans&#8221;
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance&#8221;
xmlns:p=”http://www.springframework.org/schema/p&#8221;
xmlns:aop=”http://www.springframework.org/schema/aop&#8221;
xmlns:context=”http://www.springframework.org/schema/context&#8221;
xmlns:jee=”http://www.springframework.org/schema/jee&#8221;
xmlns:tx=”http://www.springframework.org/schema/tx&#8221;
xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
“><!– Instructs Spring to perfrom declarative transaction managemenet on annotated classes –>
<tx:annotation-driven transaction-manager=”transactionManager”/>
<!– Enabling security annotation –>
<!– <security:global-method-security secured-annotations=”enabled” /> –>
<!– Scans for application @Components to deploy –>
<context:component-scan base-package=”com”/>

<!– persistent configuration –>
<bean id=”propertyConfigurer”>
<property name=”location” value=”com/tes/database.properties” />
</bean>

<!– datasource –>
<bean id=”dataSource”>
<property name=”driverClassName” value=”${database.driverClassName}”/>
<property name=”url” value=”${database.url}”/>
<property name=”username” value=”${database.username}”/>
<property name=”password” value=”${database.password}”/>
</bean>
<!– session factory –>
<bean id=”sessionFactory”>
<property name=”dataSource” ref=”dataSource”/>
<property name=”hibernateProperties”>
<value>
hibernate.dialect=${hibernate.dialect}
hibernate.show_sql=${hibernate.show_sql}
hibernate.hbm2ddl.auto = ${hibernate.auto_gen}
hibernate.c3p0.min_size = ${hibernate.c3p0.min_size}
hibernate.c3p0.max_size = ${hibernate.c3p0.max_size}
hibernate.c3p0.timeout = ${hibernate.c3p0.timeout}
hibernate.c3p0.max_statements = ${hibernate.c3p0.max_statements}
hibernate.c3p0.idle_test_period = ${hibernate.c3p0.idle_test_period}
</value>
</property>
<property name=”annotatedClasses”>
<list>
<!–master–>
<value>com.model.Ruangan</value>
</list>
</property>
</bean>
<!– persistent configuration –>
<bean id=”transactionManager”>
<property name=”sessionFactory” ref=”sessionFactory”/>
</bean>
</beans>

bean dataSource memanggil semua source yang ada dalam kelas kita. dataSource ini sangat menguntungkan kita karena menginjeksikan source. Bean sessionFactory digunakan untuk komunikasi dengan database. Dan property annotatedClass untuk memanggil kelas Ruangan.

Buat file database.properties dipaket com.tes, klik kanan > new > pilih Other > pilih kategori Other > pilih properties file dan beri nama database

# MySQL
database.driverClassName=com.mysql.jdbc.Driver
database.url=jdbc:mysql://localhost:3306/test
database.username=root
database.password=root
#postgree
#others..

#hibernate
hibernate.generate_statistics=true
hibernate.show_sql=true
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
hibernate.auto_gen = create
hibernate.c3p0.min_size = 5
hibernate.c3p0.max_size = 20
hibernate.c3p0.timeout = 300
hibernate.c3p0.max_statements = 50
hibernate.c3p0.idle_test_period = 300

Pada database.properties terdapat url database,password dan username database. Dialek dataabse harus sesuai dengan database yang dipakai, hibernate.auto_gen untuk menentukan apakah kita akan create database atau update database. Jangan lupa sebelumnya tambahin library di root Libraries biar gak error saat pemanggilan anotasi. Setelah beres klik kanan projec > Clean lalu pada paket com.tes klik kanan pilih run. Kalo sukses di database akan terbentuk tabel ruangan. Nama database sesuai dengan file database.properties.

Seharusnya project ini jalan karena saya sudah mencoba. Kalo belum mungkin ada library yang kurang.

Kapan-kapan kita lanjutakn buat kelas Service, Controller dan View nya.

Iklan

2 Komentar »

RSS feed for comments on this post. TrackBack URI

  1. thanks infonya sangat bermanfaat

    TELKOMSEL UNLIMITED ready stock

    • thanks mas salam kenal ya..


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

Buat situs web atau blog gratis di WordPress.com.
Entries dan komentar feeds.

%d blogger menyukai ini: