要在ZK上使用Hibernate,只要設定檔設好就可以直接使用


首先如果是利用Eclipse進行相關的後續開咖,應該要裝好ZK Studio,這樣才會比較方便開發,至於利用Eclipse裝法可以看一下這裡有一篇教學文章:
[AJAX][ZK] ZK & ZK Studio 

1. 開個ZK Project (Dynamic Web Project with ZK Library)

新增專案的方法可以參照官網的教學: 
http://www.zkoss.org/doc/studioguide/ch03s02.html

 

2.安裝Hibernate到專案內
使用最新的Hibernate下載網址: http://www.hibernate.org/
裡面有Download,點下去後可以下載Hibernate Core
下載完檔案後,主要需要用到的檔如下,
只要把下面這些檔放到新開專案的WEB-INF/lib內就OK

Hibernate Core
hibernate3.jar
lib/required/antlr-2.7.6.jar
lib/required/commons-collections-3.1.jar
lib/required/dom4j-1.6.1.jar
lib/required/jta-1.1.jar
lib/required/slf4j-api-1.5.2.jar
lib/required/javassist-3.4.GA.jar

Hibernate Annotations
hibernate-annotations.jar
lib/ejb3-persistence.jar
lib/hibernate-commons-annotations.jar
lib/test/log4j.jar *
lib/test/slf4j-log4j12.jar *

*[註]: 若沒有要用Annotation的話這兩個檔還是要放進去,若沒有放的話會出現
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder"
的錯誤訊息,

下載除了Log4J之外還有其他多種的選擇。

3.設定ZK Configuration檔
修改新專案WEB-INF下的zk.xml檔,主要要加入的設定如下,
直接拷貝貼上即可,也可以看官網的:
http://www.zkoss.org/doc/devguide/ch16s03.html


Hibernate SessionFactory lifecycle
org.zkoss.zkplus.hibernate.HibernateSessionFactoryListener


Hibernate Open Session In View life-cycle
org.zkoss.zkplus.hibernate.OpenSessionInViewListener


Hibernate thread session context handler
org.zkoss.zkplus.hibernate.HibernateSessionContextListener


4.建立Java物件
這裡以通訊錄的資料為例,建立一個叫做Person的類別,
會使用到的欄位有姓名、生日、電話及eMail,
用Annotation的程式碼大致如下,編輯好可以放在src/test下,
若沒有用Annotation的話,可 以參考官網,要多設定一下Mapping File:
http://www.zkoss.org/doc/devguide/ch16s05s01.html

package test;

import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "person")
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;
    private Date birthday;
    private String phone;
    private String email;

    public Person() {}

    public Long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

5.建立Hibernate Configuration檔
資料是用MySQL的當作是資料庫!
設定檔(hibernate.cfg.xml)大致如下,放到src下即可,
這兒也可以參考官網,不過不是用MySQL就是了:http://www.zkoss.org/doc/devguide/ch16s06.html


  "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">


    
        org.gjt.mm.mysql.Driver
        jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=utf-8
        root
        
        org.hibernate.dialect.MySQL5Dialect

        
        1

        
        thread

        
        org.hibernate.cache.NoCacheProvider

        
        true

        
        create
  
        
    




6.建立個DAO物件
其實沒有用DAO也是可以直接來存取資料,
不過若有用的話會比較方便,也易於維護!
可以前去參考官網上的資料:
http://www.zkoss.org/doc/devguide/ch16s07.html

package test;

import java.util.Date;
import java.util.List;
import org.hibernate.Session;
import org.zkoss.zkplus.hibernate.HibernateUtil;

public class PersonDAO {
    Session currentSession() {
        return HibernateUtil.currentSession();
    }

    public void saveOrUpdate(Person aPerson, String name, Date birthday, String phone, String email) {
        Session sess = currentSession();
        aPerson.setName(name);
        aPerson.setBirthday(birthday);
        aPerson.setPhone(phone);
        aPerson.setEmail(email);
        sess.saveOrUpdate(aPerson);
    }

    public void delete(Person aPerson) {
        Session sess = currentSession();
        sess.delete(aPerson);
    }

    public Person findById(Long id) {
        Session sess = currentSession();
        return (Person) sess.load(Person.class, id);
    }

    public List findAll() {
        Session sess = currentSession();
        return sess.createQuery("from Person").list();
    }
}

7.建立ZUML Page
Data Binding的方式,基本上在用法上很直覺的,只要加個幾行設定就行了,
程式存成喜歡的檔名.zul即可,若沒有要用Data Binding的方式,
則是可以參考官網的範例:
http://www.zkoss.org/doc/devguide/ch16s08.html

整體開發過程都可參考官網上的資料,非常詳細:
[1]. 官方網站可以連結到http://www.zkoss.org/
[2]. Hibernet開發可以連到http://www.zkoss.org/doc/devguide/ch16s01.html

 

arrow
arrow
    全站熱搜

    白努力電腦日記 發表在 痞客邦 留言(0) 人氣()