membuat CRUD menggunakan zk spring hibernate framework

Belajar ZK framework, yuk belajar zk dari pada bergalau-galauanšŸ˜€

Bismillah

Membuat CRU[D] menggunakan framework zk + spring + hibernate.

koq [D] pada tulisan CRU[D] biasanya kan CRUD (Create Read Update Delete), hew hew,, [D] karena untuk delete pasa tulisan mendatang , Insya Allah.

q> ZK framework : http://www.zkoss.org/
q> Membuat bean entity class untuk mahasiswa

package com.saifiahmada.belajarzk.bean;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

/** @author Saifi Ahmada Apr 4, 2013 4:30:49 PMĀ  **/

@Entity
@Table(name="MAHASISWA")
public class Mahasiswa implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@Column(name="NIM", length=4, nullable=false)
private String nim;

@Column(name="NAMA", length=30, nullable=false)
private String nama;

@Column(name="ALAMAT", length=50)
private String alamat;

@Column(name="NO_HP", length=20)
private String noHP;

public Mahasiswa() {

}

public Mahasiswa(String nim) {
this.nim = nim;
}

public String getNim() {
return nim;
}

public void setNim(String nim) {
this.nim = nim;
}

public String getNama() {
return nama;
}

public void setNama(String nama) {
this.nama = nama;
}

public String getAlamat() {
return alamat;
}

public void setAlamat(String alamat) {
this.alamat = alamat;
}

public String getNoHP() {
return noHP;
}

public void setNoHP(String noHP) {
this.noHP = noHP;
}

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((nim == null) ? 0 : nim.hashCode());
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Mahasiswa other = (Mahasiswa) obj;
if (nim == null) {
if (other.nim != null)
return false;
} else if (!nim.equals(other.nim))
return false;
return true;
}

@Override
public String toString() {
return "Mahasiswa [nim=" + nim + "]";
}

}

q> Membuat interface MahasiswaDao

package com.saifiahmada.belajarzk.dao;

import java.util.List;

import com.saifiahmada.belajarzk.bean.Mahasiswa;

/** @author Saifi Ahmada Apr 4, 2013 4:35:37 PMĀ  **/

public interface MahasiswaDao {

public void saveOrUpdate(Mahasiswa mhs);

public void delete(Mahasiswa mhs);

public List<Mahasiswa> findAll();

}

q> Membuat class MahasiswaDaoImpl

package com.saifiahmada.belajarzk.dao;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.transaction.annotation.Transactional;

import com.saifiahmada.belajarzk.bean.Mahasiswa;

/** @author Saifi Ahmada Apr 4, 2013 4:35:49 PMĀ  **/

public class MahasiswaDaoImpl extends HibernateDaoSupport implements MahasiswaDao {

@Transactional(readOnly=false)
public void saveOrUpdate(Mahasiswa mhs) {
// TODO , masbro
Mahasiswa entity = (Mahasiswa) getHibernateTemplate().getSessionFactory().getCurrentSession().get(Mahasiswa.class, mhs.getNim());
if (entity == null){
getHibernateTemplate().save(mhs);
System.out.println("insert");
}else{
getHibernateTemplate().merge(mhs);
System.out.println("update");
}

}

public void delete(Mahasiswa mhs) {
// TODO , masbro

}

@Transactional(readOnly=true)
public List<Mahasiswa> findAll() {
// TODO , masbro

return getHibernateTemplate().find("from Mahasiswa");
}

}

q> Configurasi pada hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database dialect untuk oracle-->
<!-- <property name="hibernate.dialect">org.hibernate.dialect.Oracle9iDialect</property> -->

<!-- Database dialect untuk mysql-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

<!-- Echo all executed SQL to stdout -->
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>

<mapping class="com.saifiahmada.belajarzk.bean.TrioMstaccessrole" />
<mapping class="com.saifiahmada.belajarzk.bean.TrioMstmenu" />
<mapping class="com.saifiahmada.belajarzk.bean.TrioMstrole" />
<mapping class="com.saifiahmada.belajarzk.bean.TrioMstuser" />

<mapping class="com.saifiahmada.belajarzk.bean.TrioMstuserrole" />
<mapping class="com.saifiahmada.belajarzk.bean.TrioMstcabang" />

<mapping class="com.saifiahmada.belajarzk.bean.Mahasiswa" />

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

q> Configurasi applicationContext.xml untuk Spring

<?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:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<!-- <bean id="propertyConfigurer">
<property name="location" value="file:/home/glassfish/ZKGLASS/database.properties"
/> </bean> -->

<bean
class="org.jasypt.spring.properties.EncryptablePropertyPlaceholderConfigurer">
<constructor-arg>
<bean>
<property name="password" value="saifiahmadaencrypter" />
</bean>
</constructor-arg>
<property name="locations">
<list>
<!-- config buat linux -->
<value>file:/home/glassfish/workspace/belajarzk/dbconfig.properties</value>
<!-- config buat windows -->
<!--<value>file:D:\config\dbconfig.properties</value>-->
</list>
</property>
</bean>

<!-- the data source class is recommend to use com.mchange.v2.c3p0.ComboPooledDataSource
in production phase -->
<bean id="dataSource"
destroy-method="close">
<property name="driverClass" value="${jdbc.driverClass}" />
<property name="jdbcUrl" value="${jdbc.jdbcUrl}" />
<property name="user" value="${jdbc.user}" />
<property name="password" value="${jdbc.password}" />
</bean>

<!-- define Hibernate sessionFactory provided by Spring ORM -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- set other Hibernate properties in hibernate.cfg.xml file -->
<property name="configLocation" value="/WEB-INF/hibernate.cfg.xml" />
</bean>

<!-- define Hibernate sessionFactory provided by Spring -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<!-- for using annotation @Transaction in DAOs -->
<tx:annotation-driven />

<bean id="trioMstaccessroleDao">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="trioMstmenuDao">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="trioMstroleDao">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="trioMstuserDao">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="trioMstuserroleDao">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="trioMstcabangDao">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="mahasiswaDao">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<!-- master facade beans -->

<bean id="masterFacade">

<property name="mahasiswaDao">
<ref bean="mahasiswaDao" />
</property>

<property name="trioMstcabangDao">
<ref bean="trioMstcabangDao" />
</property>
<property name="trioMstuserroleDao">
<ref bean="trioMstuserroleDao" />
</property>
<property name="trioMstaccessroleDao">
<ref bean="trioMstaccessroleDao" />
</property>

<property name="trioMstmenuDao">
<ref bean="trioMstmenuDao" />
</property>

<property name="trioMstroleDao">
<ref bean="trioMstroleDao" />
</property>

<property name="trioMstuserDao">
<ref bean="trioMstuserDao" />
</property>

</bean>
</beans>

q> Membuat class MasterFacade

package com.saifiahmada.belajarzk.facade;

import com.saifiahmada.belajarzk.dao.MahasiswaDao;
import com.saifiahmada.belajarzk.dao.TrioMstaccessroleDao;
import com.saifiahmada.belajarzk.dao.TrioMstcabangDao;
import com.saifiahmada.belajarzk.dao.TrioMstmenuDao;
import com.saifiahmada.belajarzk.dao.TrioMstroleDao;
import com.saifiahmada.belajarzk.dao.TrioMstuserDao;
import com.saifiahmada.belajarzk.dao.TrioMstuserroleDao;

public class MasterFacade {

protected TrioMstaccessroleDao trioMstaccessroleDao;

protected TrioMstmenuDao trioMstmenuDao;

protected TrioMstroleDao trioMstroleDao;

protected TrioMstuserDao trioMstuserDao;

protected TrioMstuserroleDao trioMstuserroleDao;

protected TrioMstcabangDao trioMstcabangDao;

protected MahasiswaDao mahasiswaDao;

public MahasiswaDao getMahasiswaDao() {
return mahasiswaDao;
}

public void setMahasiswaDao(MahasiswaDao mahasiswaDao) {
this.mahasiswaDao = mahasiswaDao;
}

public TrioMstcabangDao getTrioMstcabangDao() {
return trioMstcabangDao;
}

public void setTrioMstcabangDao(TrioMstcabangDao trioMstcabangDao) {
this.trioMstcabangDao = trioMstcabangDao;
}

public TrioMstuserroleDao getTrioMstuserroleDao() {
return trioMstuserroleDao;
}

public void setTrioMstuserroleDao(TrioMstuserroleDao trioMstuserroleDao) {
this.trioMstuserroleDao = trioMstuserroleDao;
}

public TrioMstaccessroleDao getTrioMstaccessroleDao() {
return trioMstaccessroleDao;
}

public void setTrioMstaccessroleDao(TrioMstaccessroleDao trioMstaccessroleDao) {
this.trioMstaccessroleDao = trioMstaccessroleDao;
}

public TrioMstmenuDao getTrioMstmenuDao() {
return trioMstmenuDao;
}

public void setTrioMstmenuDao(TrioMstmenuDao trioMstmenuDao) {
this.trioMstmenuDao = trioMstmenuDao;
}

public TrioMstroleDao getTrioMstroleDao() {
return trioMstroleDao;
}

public void setTrioMstroleDao(TrioMstroleDao trioMstroleDao) {
this.trioMstroleDao = trioMstroleDao;
}

public TrioMstuserDao getTrioMstuserDao() {
return trioMstuserDao;
}

public void setTrioMstuserDao(TrioMstuserDao trioMstuserDao) {
this.trioMstuserDao = trioMstuserDao;
}

}

q> Membuat View / Interface menggunakan ZK -> inputMahasiswa.zul

<?page title="new page title" contentType="text/html;charset=UTF-8"?>
<zk>
<style src="../css/triostyle.css"/>
<div
apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('com.saifiahmada.belajarzk.input.InputMahasiswaVM')">
<separator />

<groupbox><caption label="Input Mahasiswa" sclass="mycaption" />
<vbox>
<hbox>
<cell width="100px"><label sclass="mylabel" value="NIM" /></cell>
<cell><textbox sclass="mytext" value="@bind(vm.mahasiswa.nim)" /></cell>
</hbox>

<hbox>
<cell width="100px"><label sclass="mylabel" value="Nama" /></cell>
<cell><textbox sclass="mytext" value="@bind(vm.mahasiswa.nama)" /></cell>
</hbox>

<hbox>
<cell width="100px"><label sclass="mylabel" value="Alamat" /></cell>
<cell><textbox sclass="mytext" value="@bind(vm.mahasiswa.alamat)" /></cell>
</hbox>

<hbox>
<cell width="100px"><label sclass="mylabel" value="No HP" /></cell>
<cell><textbox sclass="mytext" value="@bind(vm.mahasiswa.noHP)" /></cell>
</hbox>
</vbox>
<separator />
<button label="Simpan" sclass="mybutton orange bigrounded" onClick="@command('save')" image="/image/iconcrud/btn_save.gif" />
<space width="5px" />
<button label="Reset" sclass="mybutton orange bigrounded" onClick="@command('reset')" image="/image/iconcrud/btn_reset.gif" />
</groupbox>
<separator />
<listbox sclass="mylist" model="@load(vm.mahasiswaModel)" selectedItem="@bind(vm.mahasiswa)"
mold="paging" pageSize="10" pagingPosition="bottom">
<listhead sizable="true">
<listheader width="100px" label="NIM" />
<listheader width="100px" label="Nama" />
<listheader width="100px" label="Alamat" />
<listheader label="NO HP" />
</listhead>

<template name="model" var="p1">
<listitem>
<listcell label="@load(p1.nim)" />
<listcell label="@load(p1.nama)" />
<listcell label="@load(p1.alamat)" />
<listcell label="@load(p1.noHP)" />
</listitem>
</template>
</listbox>
</div>
</zk>

q> Membuat class ViewModel untuk inputMahasiswa.zul –> InputMahasiswaVM

package com.saifiahmada.belajarzk.input;

import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.NotifyChange;
import org.zkoss.zul.ListModelList;

import com.saifiahmada.belajarzk.base.TrioBasePageVM;
import com.saifiahmada.belajarzk.bean.Mahasiswa;

/** @author Saifi Ahmada Apr 4, 2013 4:46:43 PMĀ  **/

public class InputMahasiswaVM extends TrioBasePageVM {

private Mahasiswa mahasiswa;

private ListModelList<Mahasiswa> mahasiswaModel;

public ListModelList<Mahasiswa> getMahasiswaModel(){
if (mahasiswaModel == null) {
mahasiswaModel = new ListModelList<Mahasiswa>();
mahasiswaModel.addAll(getMasterFacade().getMahasiswaDao().findAll());
}
return mahasiswaModel;
}

@NotifyChange({"mahasiswa","mahasiswaModel"})
@Command
public void save(){
System.out.println("save");
System.out.println("Nama "+mahasiswa.getNama());
getMasterFacade().getMahasiswaDao().saveOrUpdate(getMahasiswa());
reset();
}

@NotifyChange({"mahasiswa","mahasiswaModel"})
@Command
public void reset(){
mahasiswaModel = new ListModelList<Mahasiswa>();
mahasiswaModel.addAll(getMasterFacade().getMahasiswaDao().findAll());
mahasiswa = new Mahasiswa();
}

public Mahasiswa getMahasiswa() {
if (mahasiswa == null) mahasiswa = new Mahasiswa();
return mahasiswa;
}

public void setMahasiswa(Mahasiswa mahasiswa) {
this.mahasiswa = mahasiswa;
}

}

q> Code for TrioBasePageVM

package com.saifiahmada.belajarzk.base;

import java.sql.Connection;

import javax.sql.DataSource;

import org.springframework.jdbc.datasource.DataSourceUtils;
import org.zkoss.zk.ui.Sessions;
import org.zkoss.zkplus.spring.SpringUtil;

import com.saifiahmada.belajarzk.facade.MasterFacade;

/*
* Created by Saifi Ramli $
*
* Tue Sep 25 21:03:40 PM @ kos Bandaneira
*/

public class TrioBasePageVMĀ  {

/**
*
*/

private static String userSession;

private MasterFacade mf;

public MasterFacade getMasterFacade() {
MasterFacade mf = (MasterFacade) SpringUtil.getBean("masterFacade");
return mf;
}

public static String getUserSession() {
String username = (String) Sessions.getCurrent().getAttribute("username");
System.out.println("username = "+username);
userSession = username;
return userSession;
}

public static void setUserSession(String userSession) {
TrioBasePageVM.userSession = userSession;
}

public Connection getReportConnection(){

DataSource ds = (DataSource) SpringUtil.getBean("dataSource");
Connection con = DataSourceUtils.getConnection(ds);
return con;
}

}

q> Package project “belajarzk”

Selection_089

q> Tampilan form Input Mahasiswa

Selection_091

q> Isi form tekan tombol Simpan

Selection_092

q> Setelah tombol Simpan diklik

Selection_093

q> Untuk ngedit gimana dongšŸ˜€

Selection_094

q> Gimana hasilnya ?

Selection_095

q> Untuk delete, bersambung dulu ya , next

q> Insya Allah.

[Updated] Untuk delete action ini linknya

https://saifiahmada.wordpress.com/2013/04/05/membuat-crud-menggunakan-zk-spring-hibernate-framework2/

[Update2] Atas koreksi spinx73 ( thank )

q> Edit file web.xml ( config spring dan zk )


<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<description><![CDATA[My ZK Application]]></description>
 <display-name>belajarzk</display-name>

 <!-- spring -->
 <listener>
 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>
 <listener>
 <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
 </listener>

<!-- //// -->
 <!-- ZK -->
 <listener>
 <description>ZK listener for session cleanup</description>
 <listener-class>org.zkoss.zk.ui.http.HttpSessionListener</listener-class>
 </listener>
 <servlet>
 <description>ZK loader for ZUML pages</description>
 <servlet-name>zkLoader</servlet-name>
 <servlet-class>org.zkoss.zk.ui.http.DHtmlLayoutServlet</servlet-class>

<!-- Must. Specifies URI of the update engine (DHtmlUpdateServlet).
 It must be the same as <url-pattern> for the update engine.
 -->
 <init-param>
 <param-name>update-uri</param-name>
 <param-value>/zkau</param-value>
 </init-param>
 <!-- Optional. Specifies whether to compress the output
 of the ZK loader. It speeds up the transmission over slow Internet.
 However, if you configure a filter to post-processing the
 output, you might have to disable it.

Default: true
 <init-param>
 <param-name>compress</param-name>
 <param-value>true</param-value>
 </init-param>
 -->
 <!-- [Optional] Specifies the default log level: OFF, ERROR, WARNING,
 INFO, DEBUG and FINER. If not specified, the system default is used.
 <init-param>
 <param-name>log-level</param-name>
 <param-value>OFF</param-value>
 </init-param>
 -->
 <load-on-startup>1</load-on-startup><!-- Must -->
 </servlet>
 <servlet-mapping>
 <servlet-name>zkLoader</servlet-name>
 <url-pattern>*.zul</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
 <servlet-name>zkLoader</servlet-name>
 <url-pattern>*.zhtml</url-pattern>
 </servlet-mapping>
 <!-- [Optional] Uncomment it if you want to use richlets.
 <servlet-mapping>
 <servlet-name>zkLoader</servlet-name>
 <url-pattern>/zk/*</url-pattern>
 </servlet-mapping>
 -->
 <servlet>
 <description>The asynchronous update engine for ZK</description>
 <servlet-name>auEngine</servlet-name>
 <servlet-class>org.zkoss.zk.au.http.DHtmlUpdateServlet</servlet-class>

<!-- [Optional] Specifies whether to compress the output
 of the ZK loader. It speeds up the transmission over slow Internet.
 However, if your server will do the compression, you might have to disable it.

Default: true
 <init-param>
 <param-name>compress</param-name>
 <param-value>true</param-value>
 </init-param>
 -->
 <!-- [Optional] Specifies the AU extension for particular prefix.
 <init-param>
 <param-name>extension0</param-name>
 <param-value>/upload=com.my.MyUploader</param-value>
 </init-param>
 -->
 </servlet>
 <servlet-mapping>
 <servlet-name>auEngine</servlet-name>
 <url-pattern>/zkau/*</url-pattern>
 </servlet-mapping>

<!-- [Optional]
 Uncomment if you want to use the ZK filter to post process the HTML output
 generated by other technology, such as JSP and velocity.
 <filter>
 <filter-name>zkFilter</filter-name>
 <filter-class>org.zkoss.zk.ui.http.DHtmlLayoutFilter</filter-class>
 <init-param>
 <param-name>extension</param-name>
 <param-value>html</param-value>
 </init-param>
 <init-param>
 <param-name>compress</param-name>
 <param-value>true</param-value>
 </init-param>
 </filter>
 <filter-mapping>
 <filter-name>zkFilter</filter-name>
 <url-pattern>your URI pattern</url-pattern>
 </filter-mapping>
 -->
 <!-- //// -->

<!-- ///////////// -->
 <!-- DSP (optional)
 Uncomment it if you want to use DSP
 However, it is turned on since zksandbox uses DSP to generate CSS.
 <servlet>
 <servlet-name>dspLoader</servlet-name>
 <servlet-class>org.zkoss.web.servlet.dsp.InterpreterServlet</servlet-class>
 <init-param>
 <param-name>class-resource</param-name>
 <param-value>true</param-value>
 </init-param>
 </servlet>
 <servlet-mapping>
 <servlet-name>dspLoader</servlet-name>
 <url-pattern>*.dsp</url-pattern>
 </servlet-mapping>
 -->

 <!-- /////////// -->
 <!-- [Optional] Session timeout -->
 <session-config>
 <session-timeout>60</session-timeout>
 </session-config>

<!-- [Optional] MIME mapping -->
 <mime-mapping>
 <extension>doc</extension>
 <mime-type>application/vnd.ms-word</mime-type>
 </mime-mapping>
 <mime-mapping>
 <extension>gif</extension>
 <mime-type>image/gif</mime-type>
 </mime-mapping>
 <mime-mapping>
 <extension>htm</extension>
 <mime-type>text/html</mime-type>
 </mime-mapping>
 <mime-mapping>
 <extension>html</extension>
 <mime-type>text/html</mime-type>
 </mime-mapping>
 <mime-mapping>
 <extension>jpeg</extension>
 <mime-type>image/jpeg</mime-type>
 </mime-mapping>
 <mime-mapping>
 <extension>jpg</extension>
 <mime-type>image/jpeg</mime-type>
 </mime-mapping>
 <mime-mapping>
 <extension>js</extension>
 <mime-type>text/javascript</mime-type>
 </mime-mapping>
 <mime-mapping>
 <extension>pdf</extension>
 <mime-type>application/pdf</mime-type>
 </mime-mapping>
 <mime-mapping>
 <extension>png</extension>
 <mime-type>image/png</mime-type>
 </mime-mapping>
 <mime-mapping>
 <extension>txt</extension>
 <mime-type>text/plain</mime-type>
 </mime-mapping>
 <mime-mapping>
 <extension>xls</extension>
 <mime-type>application/vnd.ms-excel</mime-type>
 </mime-mapping>
 <mime-mapping>
 <extension>xml</extension>
 <mime-type>text/xml</mime-type>
 </mime-mapping>
 <mime-mapping>
 <extension>zhtml</extension>
 <mime-type>text/html</mime-type>
 </mime-mapping>
 <mime-mapping>
 <extension>zul</extension>
 <mime-type>text/html</mime-type>
 </mime-mapping>

<welcome-file-list>
 <welcome-file>index.zul</welcome-file>
 <welcome-file>index.zhtml</welcome-file>
 <welcome-file>index.html</welcome-file>
 <welcome-file>index.htm</welcome-file>
 </welcome-file-list>
</web-app>

Alhamdulillah

Published by

saifiahmada

Begin a big Process with a bit trying

7 thoughts on “membuat CRUD menggunakan zk spring hibernate framework”

  1. jadi malu, padahal saya beneran nanya karena lagi belajar juga tentang webapp dengan zk. kl boleh lagi nih source code di upload biar bisa sama2 belajar, karena sampe sekarang masih belum jelas hubungan antara applicationcontext dan hibernate.cfg

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s