Topquan's Blog

          分享價值----成就你我----我的博客----你的家

          Struts+Spring+Hibernate組合使用

          本文是開發(fā)基于 spring web 應(yīng)用的入門文章,前端采用 Struts MVC 框架,中間層采用 spring ,后臺采用 Hibernate
            
            本文包含以下內(nèi)容:
            
             · 配置 Hibernate 和事務(wù)
            
             · 裝載 Spring applicationContext.xml 文件
            
             · 建立業(yè)務(wù)層和 DAO 之間的依賴關(guān)系
            
             · Spring 應(yīng)用到 Struts
            
            簡介
            
            這個例子是建立一個簡單的 web 應(yīng)用,叫 MyUsers, 完成用戶管理操作,包含簡單的 數(shù)據(jù)庫 增,刪,查,該即 CRUD (新建,訪問,更新,刪除)操作 這是一個三層的 web 應(yīng)用,通過 Action Struts )訪問業(yè)務(wù)層,業(yè)務(wù)層訪問 DAO 圖一簡要說明了該應(yīng)用的總體結(jié)構(gòu) 圖上的數(shù)字說明了流程順序-從 web UserAction )到中間層( UserManager ),再到數(shù)據(jù)訪問層( UserDAO ),然后將結(jié)果返回
            
             Spring 層的真正強(qiáng)大在于它的聲明型事務(wù)處理,幫定和對持久層支持(例如 Hiberate iBATIS
            
            以下下是完成這個例子的步驟:
            
             1 安裝 Eclipse 插件
            
             2 數(shù)據(jù)庫 建表
            
             3 配置 Hibernate Spring
            
             4 建立 Hibernate DAO 接口的實(shí)現(xiàn)類
            
             5 運(yùn)行測試類,測試 DAO CRUD 操作
            
             6 創(chuàng)建一個處理類,聲明事務(wù)
            
             7 創(chuàng)建 web 層的 Action model
            
             8 運(yùn)行 Action 的測試類測試 CRUD 操作
            
             9 創(chuàng)建 jsp 文件通過瀏覽器進(jìn)行 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
            
             數(shù)據(jù)庫 建表
            
             create table app_user(id number not null primary,firstname vchar(32),lastname vchar(32));
            
            新建項目
            
            新建一個 web project ,新建后的目錄結(jié)構(gòu)同時包含了新建文件夾 page 用于放 jsp 文件,和源文件夾 test 用于放 junit 測試文件 同時將用到的包,包括 struts hibernate spring 都導(dǎo)入到 lib 目錄下
            
            創(chuàng)建持久層 O/R mapping/ 小新技術(shù)網(wǎng) www.xker.com
            
             1 src/com.jandar.model 下用 hibernate 插件從 數(shù)據(jù)庫 導(dǎo)出 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 對象對應(yīng)于 數(shù)據(jù)庫 中的 app_user

          注:在 eclipse 下自動生成的對象文件不完全相同,相同的是每個對象文件必須實(shí)現(xiàn) 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;
             }
             }
            
            創(chuàng)建 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);
             }
             }
             }
            在這個類中實(shí)現(xiàn)了 IUserDAO 接口的方法,并且繼承了 HibernateDAOSupport 類。這個類的作用是通過 hibernate 訪問、操作對象,進(jìn)而實(shí)現(xiàn)對數(shù)據(jù)庫的操作。

          posted on 2006-05-08 22:46 topquan 閱讀(512) 評論(0)  編輯  收藏 所屬分類: Spring

          主站蜘蛛池模板: 湛江市| 汕头市| 文化| 昌图县| 收藏| 大冶市| 额敏县| 方城县| 大新县| 综艺| 鸡泽县| 江西省| 平武县| 曲靖市| 东光县| 吴忠市| 贞丰县| 蒲城县| 龙门县| 沂水县| 启东市| 金沙县| 登封市| 望都县| 贵州省| 苍山县| 永靖县| 韶山市| 临城县| 南城县| 娱乐| 松阳县| 高州市| 桓仁| 内黄县| 封丘县| 乐昌市| 邵阳县| 会东县| 岳池县| 九寨沟县|