Spring Hibernate versi Anotation Part 1

Pada article sebelumnya saya sudah membahas implementasi spring hibernate yang masih full XML pada saat pengcodeannya di Spring Hibernate versi XML, memang kalo di lihat isinya cuman simple CRUD doank. Soalnya mau kasih contoh sama penjelasan lengkap tuh males euyy,, xixixi, jadi buat yang baca silahkan di pahami yaaa. Nah pada article ini saya akan membahas implementasi spring hibernate pake anotation, penggunaan menggunakan anotation ini merupakan metode baru yang mulai di gunakan, bukan mulai kali ya, tapi sudah banyak yang menggunakannya, walaupun ada juga yang masih menggunakan metode lama.

Kelebihan menggunakan anotation ini adalah magic, nah lho kok magic, yaaaa dengan menggunakan anotation banyak proses yang tidak kelihatan, padahal proses tersebut ada. Misal kalo session factorinya si hibernate di @Autowired, katanya sih pada saat prosesnya gagal dia bakal ngeRoll Back sendiri (sotoy ya gw, mangap deh kalo salah) , trus jika sebelumnya pembuatan repository beannya full XML sekarang dengan anotation penggunaan XML di minimalisir. BTW denger desas - desus sih katanya gak perlu buat application.context.xml lagi, nah lho,, ini gw belajarnya nyasar apa desas - desusnya cuman gosip belaka, soalnya saya coba masih application.context.xml ,Maka dari itu kita ulas secara tuntas setajam silet, wkwkwkw kayak infotainment aja .

Dari pada cuap - cuap kepanjangan kaya curhat, kita langsung ke TPK aja. Seperti biasa, sebelum memulai ke contoh, saya tunjukin dulu struktur projectnya. Maksud saya tunjukin struktur projectnya sih agar pembaca tau class - class dan file - file yang akan di buat di letakan di mana, supaya saya tidak usah menjelaskan "coba buat project A, kemudian buat sebuah Class B, di package C" , kan kalo gitu puaanjang ceritanya. Eh jadi curhat lagi , nih struktur projectnya :

nah sudah lihat struktur projectnya kan ?? sekarang kita langsung ke code, file pertama yang akan di buat adalah file properties dengan nama :

hsa.properties

hibernate.connection.driver_class= com.mysql.jdbc.Driver
hibernate.connection.url         = jdbc:mysql://localhost/latihan
hibernate.connection.username    = root
hibernate.connection.password    = tulalit
hibernate.dialect                = org.hibernate.dialect.MySQLInnoDBDialect
hibernate.hbm2ddl_auto=create
hibernate.show_sql=true
hibernate.show_statistics=true 

selanjutnya adalah membuat hibernate.cfg.xml

<?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>
	<!-- Properties -->
	<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
              <property name="hibernate.connection.url">jdbc:mysql://localhost/latihan</property>
              <property name="hibernate.connection.username">root</property>
              <property name="hibernate.connection.password">tulalit</property>
              <property name="hibernate.connection.pool_size">10</property>
              <property name="show_sql">false</property>
              <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
              <property name="hibernate.hbm2ddl.auto">update</property> 
	<mapping class="com.adhit.hsa.entity.Item"/>

	</session-factory>
</hibernate-configuration>  

setelah itu membuat app.ctx.xml

<?xml version="1.0" encoding="UTF-8"?
<beans xmlns="http://www.springframework.org/schema/beans
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
       xmlns:p="http://www.springframework.org/schema/p
       xmlns:context="http://www.springframework.org/schema/context
       xmlns:tx="http://www.springframework.org/schema/tx
       xsi:schemaLocation="    
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-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/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
>
    <context:property-placeholder location="classpath:hsa.properties" />   
    <context:component-scan base-package="com.adhit.hsa" /
    <tx:annotation-driven transaction-manager="transactionManager" />
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource
   	p:driverClassName="${hibernate.connection.driver_class}" p:url="${hibernate.connection.url}
   	p:username="${hibernate.connection.username}" p:password="${hibernate.connection.password}" />

 

    <!-- setting spring jika menggunakan sessionfactory--
    <bean id="sessionFactory 
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean
   	p:dataSource-ref="dataSource"
        <property name="configLocation"
            <value>classpath:hibernate.cfg.xml</value>
        </property
        <property name="hibernateProperties"
            <props
                <prop key="hibernate.dialect"
                    ${hibernate.dialect}
                </prop>
                <prop key="hibernate.show_sql">
                    ${hibernate.show_sql}
                </prop>
                <prop key="hibernate.generate_statistics">
                    ${hibernate.show_statistics}
                </prop>
            </props>
        </property>
    </bean>
    <bean id="transactionManager"    
          class="org.springframework.orm.hibernate3.HibernateTransactionManager"
                p:sessionFactory-ref="sessionFactory" />                
    </beans>

jika sudah sekarang mulai ke pembuatan class - classnya, class yang pertama di buat adalah pembuatan class DefaultPersistence.java untuk merepresentasikan id yang nantinya di turunkan pada setiap class entity

package com.adhit.hsa.utility;
import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
@MappedSuperclass    
public class DefaultPersistence implements Serializable {
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Basic(optional = false)
	@Column(name = "id")
	private int id;
	public int getId() {
                    return id;
	}
	public void setId(int id) {
	      this.id = id;
	}

}  

jika sudah, sekarang membuat class entity Item.java

package com.adhit.hsa.entity;
import javax.persistence.Entity;   
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;
import com.adhit.hsa.utility.DefaultPersistence;

@Entity    
@Table(name = "tb_item")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class Item extends DefaultPersistence {

	private int code;
	private String name;
	private String description;
	private int price;
	public int getCode() {
	      return code;
	}
	public void setCode(int code) {    
                    this.code = code;
	}

	public String getName() {    
                    return name;
	}
	public void setName(String name) {
                    this.name = name;
	}
	public String getDescription() {
                    return description;
	}
	public void setDescription(String description) {    
                    this.description = description;
	}

	public int getPrice() {
                    return price;
	}

	public void setPrice(int price) {    
 	       this.price = price;
	}
}  

selanjutnya adalah pembuat interface ItemDAO.java

package com.adhit.hsa.item.dao;

import java.util.List;    
import com.adhit.hsa.entity.Item;

public interface ItemDAO {

	public void save (Item item);    
 
	public void delete (Item item);
	public Item findById (Object id);

	public List<Item> findList (String query);
}  

Setelah itu buat class implementnya dengan nama ItemDAOImplement.java

package com.adhit.hsa.item.dao;

import java.io.Serializable;
import java.util.List;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.adhit.hsa.entity.Item;

@Repository("itemDAO")
public class ItemDAOImplement implements ItemDAO {
         private SessionFactory sessionFactory;
	
	@Autowired
              public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
              }
	
	@Override
	public void delete(Item item) {
		sessionFactory.getCurrentSession().delete(item);
	}

	@Override
	public Item findById(Object id) {
		Item item = new Item();
		sessionFactory.getCurrentSession().get(Item.class, (Serializable) id);
		return item;
	}

	@Override
	public List<Item> findList(String query) {
		return sessionFactory.getCurrentSession().createQuery(query).list();
	}

	@Override
	public void save(Item item) {
		sessionFactory.getCurrentSession().saveOrUpdate(item);
	}
}

setelah selesai sekarang kita buat interface Service.java

package com.adhit.hsa.service.dao;

import java.util.List;
import com.adhit.hsa.entity.Item;

public interface Service {
	
	public void save (Item item);
	
	public void delete (Item item);
	
	public Item findById (Object id);

	public List<Item> findList (String query);

}

nah berhubung disini batas tulisannya di batasi, jadi bersambung dehh ke Spring Hibernate versi Anotation Part 2

 

blog comments powered by Disqus