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.Driverhibernate.connection.url = jdbc:mysql://localhost/latihanhibernate.connection.username = roothibernate.connection.password = tulalithibernate.dialect = org.hibernate.dialect.MySQLInnoDBDialecthibernate.hbm2ddl_auto=createhibernate.show_sql=truehibernate.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/beansxmlns:xsi="http://www.w3.org/2001/XMLSchema-instancexmlns:p="http://www.springframework.org/schema/pxmlns:context="http://www.springframework.org/schema/contextxmlns:tx="http://www.springframework.org/schema/txxsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsdhttp://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.DriverManagerDataSourcep: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.AnnotationSessionFactoryBeanp: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;@MappedSuperclasspublic 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;@Autowiredpublic void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;}@Overridepublic void delete(Item item) {sessionFactory.getCurrentSession().delete(item);}
@Overridepublic Item findById(Object id) {Item item = new Item();sessionFactory.getCurrentSession().get(Item.class, (Serializable) id);return item;}
@Overridepublic List<Item> findList(String query) {return sessionFactory.getCurrentSession().createQuery(query).list();}
@Overridepublic void save(Item item) {sessionFactory.getCurrentSession().saveOrUpdate(item);}}
setelah selesai sekarang kita buat interface Service.java
nah berhubung disini batas tulisannya di batasi, jadi bersambung dehh ke Spring Hibernate versi Anotation Part 2package 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);}