Eclipse3.0下Struts +spring+ hibernate快速入門(1)

來源:互聯網
上載者:User
快速入門
本文是開發基於spring的web應用的入門文章,前端採用Struts MVC架構,中介層採用spring,後台採用Hibernate。

本文包含以下內容:

·配置Hibernate和事務















·裝載Spring的applicationContext.xml檔案















·建立業務層和DAO之間的依賴關係















·將Spring應用到Struts中














概纜
這個例子是建立一個簡單的web應用,叫MyUsers,完成使用者管理操作,包含簡單的資料庫增,刪,查,該即CRUD(建立,訪問,更新,刪除)操作。這是一個三層的web應用,通過Action(Struts)訪問業務層,業務層訪問DAO。圖一簡要說明了該應用的總體結構。圖上的數字說明了流程順序-從web(UserAction)到中介層(UserManager),再到資料訪問層(UserDAO),然後將結果返回。







Spring層的真正強大在於它的聲明型交易處理,幫定和對持久層支援(例如Hiberate和iBATIS)

以下下是完成這個例子的步驟:

1.  安裝Eclipse外掛程式

2.  資料庫建表

3.  配置Hibernate和Spring

4.  建立Hibernate DAO介面的實作類別

5.  運行測試類別,測試DAO的CRUD操作

6.  建立一個處理類,聲明事務

7.  建立web層的Action和model

8.  運行Action的測試類別測試CRUD操作

9.    建立jsp檔案通過瀏覽器進行CRUD操作

10. 通過瀏覽器校正jsp
安裝eclipse外掛程式
1.  Hibernate外掛程式http://www.binamics.com/hibernatesync

2.  Spring外掛程式http://springframework.sourceforge.net/spring-ide/eclipse/updatesite/

3.  MyEclipse外掛程式(破解版)

4.  Tomcat外掛程式. tanghan

5.  其他外掛程式包括xml,jsp,
資料庫建表 create table app_user(id number not null primary,firstname vchar(32),lastname vchar(32));建立項目
建立一個web project,



建立後的目錄結構如上圖所示,同時包含了建立檔案夾page用於放jsp檔案,和源檔案夾test用於放junit測試檔案。同時將用到的包,包括struts,hibernate,spring都匯入到lib目錄下。
建立持久層O/R mapping
1.  在src/com.jandar.model下用hibernate外掛程式從資料庫匯出app_user的.hbm.xml檔案改名為User.hbm.xml

   <?xml version="1.0"?>















<!DOCTYPE hibernate-mapping PUBLIC















    "-//Hibernate/Hibernate Mapping DTD//EN"















     "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >















<hibernate-mapping package="com.jandar.model">















    <class name="User" table="APP_USER">















        <id















            column="ID"















            name="id"















            type="integer"















        >















            <generator class="assigned" />















        </id>















        <property















            column="LASTNAME"















            length="10"















            name="lastname"















            not-null="false"















            type="string"















         />















        <property















            column="FIRSTNAME"















            length="10"















            name="firstname"















            not-null="true"















            type="string"















         />















    </class>















</hibernate-mapping>
















 


 



 



 



2.  通過hibernate synchronizer->synchronizer file產生User.java檔案,User對象對應於資料庫中的app_user表

註:在eclipse下自動產生的對象檔案不完全相同,相同的是每個對象檔案必須實現Serializable介面,必需又toString和hashCode方法;

import java.io.Serializable;

import org.apache.commons.lang.builder.EqualsBuilder;

import org.apache.commons.lang.builder.HashCodeBuilder;

import org.apache.commons.lang.builder.ToStringBuilder;

import org.apache.commons.lang.builder.ToStringStyle;

public class BaseObject implements Serializable {

    public String toString() {

        return ToStringBuilder.reflectionToString(this,

                ToStringStyle.MULTI_LINE_STYLE);

    }


 


 



 



 



    public boolean equals(Object o) {

        return EqualsBuilder.reflectionEquals(this, o);

    }


 


 



 



 



    public int hashCode() {

        return HashCodeBuilder.reflectionHashCode(this);

    }

}

public class User extends BaseObject {

    private Long id;

    private String firstName;

    private String lastName;


 


 



 



 



    /**

     * @return Returns the id.

     */

    public Long getId() {

        return id;

    }


 


 



 



 



    /**

     * @param id The id to set.

     */

    public void setId(Long id) {

        this.id = id;

    }

   

    /**

     * @return Returns the firstName.

     */

    public String getFirstName() {

        return firstName;

    }


 


 



 



 



    /**

     * @param firstName The firstName to set.

     */

    public void setFirstName(String firstName) {

        this.firstName = firstName;

    }


 


 



 



 



    /**

     * @return Returns the lastName.

     */

    public String getLastName() {

        return lastName;

    }


 


 



 



 



    /**

     * @param lastName The lastName to set.

     */

    public void setLastName(String lastName) {

        this.lastName = lastName;

    }

}
建立DAO,訪問對象
1.  在src/com.jandar.service.dao建立IDAO.java介面,所有的DAO都繼承該介面

   package com.jandar.services.dao;

public interface IDAO {

}

2.  在src/com.jandar.service.dao下建立IUserDAO.java介面

   public interface IUserDAO extends DAO {   

       List getUsers();

       User getUser(Integer userid);

       void saveUser(User user);

       void removeUser(Integer id);


 


 



 



 





該介面提供了訪問對象的方法,

3.  在src/com.jandar.service.dao.hibernate下建立UserDAOHiberante.java

import java.util.List;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.springframework.orm.hibernate.support.HibernateDaoSupport;


 


 



 



 



import com.jandar.model.User;

import com.jandar.service.dao.IUserDAO;

public class UserDaoHibernate extends HibernateDaoSupport implements IUserDAO {


 


 



 



 



       private Log log=LogFactory.getLog(UserDaoHibernate.class);

       /* (非 Javadoc)

        * @see com.jandar.dao.IUserDAO#getUsers()

        */

       public List getUsers() {

              return getHibernateTemplate().find("from User");       

       }


 


 



 



 



       /* (非 Javadoc)

        * @see com.jandar.dao.IUserDAO#getUser(java.lang.Long)

        */

       public User getUser(Integer id) {

              // TODO 自動產生方法存根

              return (User) getHibernateTemplate().get(User.class,id);

       }


 


 



 



 



       /* (非 Javadoc)

        * @see com.jandar.dao.IUserDAO#saveUser(com.jandar.model.User)

        */

       public void saveUser(User user) {

           log.debug("xxxxxxx");

           System.out.println("yyyy");

             

                  getHibernateTemplate().saveOrUpdate(user);

              if(log.isDebugEnabled())

              {

                     log.debug("userId set to "+user.getId());

              }


 


 



 



 



       }


 


 



 



 



       /* (非 Javadoc)

        * @see com.jandar.dao.IUserDAO#removeUser(java.lang.Long)

        */

       public void removeUser(Integer id) {

              Object user=getHibernateTemplate().load(User.class,id);

              getHibernateTemplate().delete(user);

              if(log.isDebugEnabled()){

                     log.debug("

del user "+id);

              }


 


 



 



 



       }


 


 



 



 



}

在這個類中實現了IUserDAO介面的方法,並且繼承了HibernateDAOSupport類。這個類的作用是通過hibernate訪問、操作對象,進而實現對資料庫的操作。


相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。