Spring Hibernate versi XML

Pada article sebelumnya saya sudah membahas penggunaan Data Akses Object (DAO) pada hibernate di Hibernate DAO, JPA dan ANT sebagai buildernya, nah pada article ini saya akan menjelaskan implementasi spring hibernate dengan metode XML. Memang saat ini metode tersebut sudah mulai di tinggalkan oleh para programmer, karena saat ini sudah menggunakan anotation ( @ ) dalam pembuatan repository bean. Dengan menggunakan anotation, programmer tidak harus membuat bean di XML dan dengan begini proses pengcodean menjadi lebih simple. Tapi pada article saya tidak akan menjelaskan penggunaan menggunakan anotation, karena di article ini saya akan memberitahu terlebih dahulu penggunaaan spring hibernate menggunakan XML.

Dari pada panjang lebar nunggu lama mending kita langsung ke TKP, seperti biasa sebelum di mulai saya akan menunjukan library apa saja yang di butuhkan dalam project ini.

1. antlr-2.7.6.jar                            10. hibernate-annotations.jar

2. asm.jar                                     11. hibernate-commons-annotations.jar

3. asm-attrs.jar                             12. hibernate-entitymanager.jar

4. commons-collections-2.1.1.jar    13. hibernate-tools.jar

5. commons-logging-1.1.jar            14. jta.jar

6. dom4j-1.6.1.jar                          15. mysql-connector-java-5.1.6.jar

7. ejb3-persistence                        16. cglib-2.1.3.jar       

8. freemarker-2.3.10.jar                  17. spring-2.5.6.jar

9. hibernate3.jar

setelah librarynya terkumpul semuanya, saya akan kasih lihat struktur project ini seperti apa


sudah lihat struktur projectnya kan ?? bila ingin tau mengapa saya selalu menunjukan struktur project pada saat membuat postingan. Hal itu di karenakan saya tidak perlu menjelaskan step by step untuk pembuatan project, package, class - class java dan configuration file. Back to the topic, selanjutnya adalah pembuatan class - class javanya.

class yang pertama di buat adalah

DefaultPersistence.java

package com.adhit.project.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;
   
    private int id;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
   
   
}

 

class selanjutnya adalah class entity item, by the way kenapa saya selalu memberi contoh dengan entity item, entahlah lagi pula ga penting juga yah, hahaha, yang penting kan codingannya.

Item.java


package com.adhit.project.entity;

import javax.persistence.Entity;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;

import com.adhit.project.utility.DefaultPersistence;

@Entity
@Table(name="tb_item")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class Item extends DefaultPersistence {
    private String code;
    private String name;
    private String description;
    private Integer price;
   
    public String getCode() {
        return code;
    }
   
    public void setCode(String 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 Integer getPrice() {
        return price;
    }

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

 

setelah itu adalah pembuatan interface class

ItemDAO.java

package com.adhit.project.item.dao;

import java.util.List;

import com.adhit.project.entity.Item;

public interface ItemDAO {
    public void save (Item item);
   
    public void delete (Item item);
   
    public Item find (Object id);
   
    public List<Item> findList (String query);
}

 

setelah membuat interface class, proses selanjut adalah pembuatan class implement dari interface tersebut

ItemDAOImplement.java

package com.adhit.project.item.dao;

import java.io.Serializable;
import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;

import com.adhit.project.entity.Item;

@Repository
public class ItemDAOImplement extends HibernateDaoSupport implements ItemDAO {

    @Autowired
    public void setSuperSessionFactory(SessionFactory sessionFactory) {
         super.setSessionFactory(sessionFactory);
    }
   
    @Override
    public void delete(Item item) {
        getHibernateTemplate().delete(item);
    }

    @Override
    public Item find(Object id) {
        Item item = (Item) getHibernateTemplate().get(Item.class, (Serializable) id);
        return item;
    }

    @Override
    public List<Item> findList(String query) {
        return getHibernateTemplate().find(query);
    }

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

}

 

class selanjut di buat adalah class yang di perlukan untuk memanggil repository beannya

Service.java

package com.adhit.project.utility;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.adhit.project.item.dao.ItemDAOImplement;

public class Service {
    private static ApplicationContext applicationContext;
   
    static {
        applicationContext = new ClassPathXmlApplicationContext(
                "application.context.xml");
    }
   
    public static ItemDAOImplement getItem() {
        return (ItemDAOImplement) applicationContext.getBean("itemDAO",
                ItemDAOImplement.class);
    }
}

 

nah sekarang class terakhir yang di buat adalah untuk testing class code di atas

ItemMain.java

package com.adhit.project.main;

import java.util.ArrayList;
import java.util.List;

import com.adhit.project.entity.Item;
import com.adhit.project.item.dao.ItemDAO;
import com.adhit.project.utility.Service;

public class ItemMain {
   
    public static void main (String args[]) {
        ItemDAO service = Service.getItem();
       
        Item item = new Item();
        List<Item> items = new ArrayList<Item>();
       
        item.setCode("KODE1");
        item.setName("Acer Aspire Core I5");
        item.setDescription("Acer Aspire Core I5, VGA NVDIA GeoForce");
        item.setPrice(500);
       
        // Save Item
        service.save(item);
       
        // Load Item By Id
        item = service.find(item.getId());
       
        System.out.println(">>> "+item.getName());
       
        // Edit Item
        item.setId(item.getId());
        item.setName("Acer Aspire");
        service.save(item);
       
        // List Item
        items = service.findList("select object(i) from "
                + Item.class.getName() + " as i where i.id = '" + item.getId()
                + "'");
       
        // Print Item Data
        for(Item i : items) {
            System.out.println(">>> Code        : "+i.getCode());
            System.out.println(">>> Name        : "+i.getName());
            System.out.println(">>> Description : "+i.getDescription());
            System.out.println(">>> Price       : "+i.getPrice().doubleValue());
        }
       
        //Delete Item
        service.delete(item);
    }
   
}

 

 

Selanjut adalah pembuatan hibernate.cfg.xml untuk konfigurasi hibernate, apllicationContext.xml pembuatan repositoy bean dan project.properties adalah file properties yang di perlukan applicationContext.xml

nah sekarang mari buat 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/hibernate</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.project.entity.Item"/>
   
    </session-factory>
</hibernate-configuration>

 

 

setelah membuat hibernate.cfg.xml, selanjut adalah membuat file properties

project.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

 

setelah ke dua file tersebut di buat, yang terakhir adalah membuat xml contextnya

application.context.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:project.properties" />
    <context:component-scan base-package="com.adhit.crud" />
    <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}" />

    <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="annotatedClasses">
            <list>
                <value>com.adhit.project.entity.Item</value>
            </list>
        </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>
        <property name="eventListeners">
            <map>
                <entry key="merge">
                    <bean
                        class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener" />
                </entry>
            </map>
        </property>
    </bean>

    <bean id="transactionManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager"
        p:sessionFactory-ref="sessionFactory" />

    <bean id="itemDAO"
        class="com.adhit.project.item.dao.ItemDAOImplement"
        p:sessionFactory-ref="sessionFactory" />
</beans>

sebelum membuat itu semua, silahkan sediakan sebuah database kosong tanpa table untuk proses penyimpanan data, mengapa tanpa table, karena table untuk keperluan penyimpanan akan di generate oleh springnya dengan membaca mapping entity yang ada di hibernate.cfg.xml. Untuk struktur tablenya di ambil dari struktur entity yang di mapping. Kalo untuk settingan konfigurasi database bisa edit hibernate.cfg.xml dan project.propertes yang isinya konfigurasi tinggal di sesuaikan komputer lokal masing - masing.

 

Setelah panjang lebar (sebenernya sih gak panjang lebar, haha, karena saya tidak menjelaskan detail codingan di atas) article ini telah selesai di posting. Rencana untuk posting article sih sebenernya banyak yang ingin di tulis, tapi sepertinya article selanjut adalah implementasi spring hibernate menggunakan anotation (@). Dan yang pasti harapan saya semoga article ini berguna bagi para pembaca, dan semoga saya bisa membuat article yang lebih bermanfaat dari artcle sebelumnya, juga ilmu saya bisa terus bertambah agar bisa di share pada semua (banyak berharap dan cuap - cuap juga yah di ujung, wkwkwkw).

Terima Kasih

Aditya Lukman Afandi


 




 

blog comments powered by Disqus